Browse Source

parse-options: sanity check PARSE_OPT_NOARG flag

Some option types cannot use an argument --- boolean options that
would set a bit or flag or increment a counter, for example.  If
configured in the flag word to accept an argument anyway, the result
is an argument that is advertised in "program -h" output only to be
rejected by parse-options::get_value.

Luckily all current users of these option types use PARSE_OPT_NOARG
and do not use PARSE_OPT_OPTARG.  Add a check to ensure that that
remains true.  The check is run once for each invocation of
parse_option_start().

Improved-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jonathan Nieder 14 years ago committed by Junio C Hamano
parent
commit
5c400ed2e0
  1. 13
      parse-options.c

13
parse-options.c

@ -330,6 +330,19 @@ static void parse_options_check(const struct option *opts) @@ -330,6 +330,19 @@ static void parse_options_check(const struct option *opts)
opts->long_name))
err |= optbug(opts, "uses feature "
"not supported for dashless options");
switch (opts->type) {
case OPTION_BOOLEAN:
case OPTION_BIT:
case OPTION_NEGBIT:
case OPTION_SET_INT:
case OPTION_SET_PTR:
case OPTION_NUMBER:
if ((opts->flags & PARSE_OPT_OPTARG) ||
!(opts->flags & PARSE_OPT_NOARG))
err |= optbug(opts, "should not accept an argument");
default:
; /* ok. (usually accepts an argument) */
}
}
if (err)
exit(128);

Loading…
Cancel
Save