diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-05-20 10:51:53 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-05-20 19:04:54 +0200 |
commit | 31b77c1877a807ab6184b22ab2310e096536b9b5 (patch) | |
tree | eb2e4bee9ab6207abf74b850cfbc3614af2bcc41 /src | |
parent | 0da8441298569dfd714e7b21f74aab373b95d2f7 (diff) |
curl: report error for "--no-" on non-boolean options
Reported-by: Olen Andoni
Fixes #3906
Closes #3907
Diffstat (limited to 'src')
-rw-r--r-- | src/tool_getparam.c | 5 | ||||
-rw-r--r-- | src/tool_getparam.h | 3 | ||||
-rw-r--r-- | src/tool_helpers.c | 4 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/tool_getparam.c b/src/tool_getparam.c index b133cb87e..b347121f8 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -515,11 +515,13 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ const char *word = ('-' == flag[0]) ? flag + 2 : flag; size_t fnam = strlen(word); int numhits = 0; + bool noflagged = FALSE; if(!strncmp(word, "no-", 3)) { /* disable this option but ignore the "no-" part when looking for it */ word += 3; toggle = FALSE; + noflagged = TRUE; } for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) { @@ -543,6 +545,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ if(hit < 0) { return PARAM_OPTION_UNKNOWN; } + if(noflagged && (aliases[hit].desc != ARG_BOOL)) + /* --no- prefixed an option that isn't boolean! */ + return PARAM_NO_NOT_BOOLEAN; } else { flag++; /* prefixed with one dash, pass it */ diff --git a/src/tool_getparam.h b/src/tool_getparam.h index daf83b884..f6fcd5a35 100644 --- a/src/tool_getparam.h +++ b/src/tool_getparam.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -42,6 +42,7 @@ typedef enum { PARAM_NEXT_OPERATION, PARAM_NO_PREFIX, PARAM_NUMBER_TOO_LARGE, + PARAM_NO_NOT_BOOLEAN, PARAM_LAST } ParameterError; diff --git a/src/tool_helpers.c b/src/tool_helpers.c index b3a9516a8..61788b7f8 100644 --- a/src/tool_helpers.c +++ b/src/tool_helpers.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -66,6 +66,8 @@ const char *param2text(int res) return "the given option can't be reversed with a --no- prefix"; case PARAM_NUMBER_TOO_LARGE: return "too large number"; + case PARAM_NO_NOT_BOOLEAN: + return "used '--no-' for option that isn't a boolean"; default: return "unknown error"; } |