[tor-commits] [tor/master] Command-line arguments: be better at detecting absent optional args.

asn at torproject.org asn at torproject.org
Tue Dec 8 14:54:42 UTC 2020


commit 558aaf1c32ece99f62006c6a3395c3e53d5e414d
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Dec 7 16:40:19 2020 -0500

    Command-line arguments: be better at detecting absent optional args.
    
    Previously, "--list-fingerprint --quiet" was an error.  Now, the
    handler for optional arguments to "--list-fingerprint" can tell that
    "--quiet" is a flag, not an argument.
    
    This only affects flags that take an _optional_ argument, so you can
    still put your torrc file in a location starting with "-".
    
    Closes #40223.
---
 changes/argument_parse  | 5 +++++
 src/app/config/config.c | 5 ++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/changes/argument_parse b/changes/argument_parse
new file mode 100644
index 0000000000..ed8e66bba3
--- /dev/null
+++ b/changes/argument_parse
@@ -0,0 +1,5 @@
+  o Minor features (command-line interface):
+    - When parsing command-line flags that take an optional argument,
+      treat the argument as absent if it would start with a '-' character.
+      Arguments in that form are not intelligible for any of our
+      optional-argument flags.  Closes ticket 40223.
diff --git a/src/app/config/config.c b/src/app/config/config.c
index df89b6ede9..660c89bc4c 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -2601,8 +2601,11 @@ config_parse_commandline(int argc, char **argv, int ignore_errors)
         parsed_cmdline_free(result);
         return NULL;
       }
-    } else if (want_arg == ARGUMENT_OPTIONAL && is_last) {
+    } else if (want_arg == ARGUMENT_OPTIONAL &&
+               /* optional arguments may never start with '-'. */
+               (is_last || argv[i+1][0] == '-')) {
       arg = tor_strdup("");
+      want_arg = ARGUMENT_NONE; // prevent skipping the next flag.
     } else {
       arg = (want_arg != ARGUMENT_NONE) ? tor_strdup(argv[i+1]) :
                                               tor_strdup("");





More information about the tor-commits mailing list