tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 558aaf1c32ece99f62006c6a3395c3e53d5e414d
parent b50fcdc2e79e5ab639af5f53d74a4d2474821223
Author: Nick Mathewson <nickm@torproject.org>
Date:   Mon,  7 Dec 2020 16:40:19 -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.

Diffstat:
Achanges/argument_parse | 5+++++
Msrc/app/config/config.c | 5++++-
2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/changes/argument_parse 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 @@ -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("");