When getopt32() has complementary options it's possible to specify the minimum and maximum number of arguments allowed. Checking these values was inconsistent:
- '?' correctly checked that it was followed by a digit but set the otherwise unused spec_flgs variable on error. - '=' failed to check that it was followed by a digit. function old new delta vgetopt32 1307 1319 +12 Signed-off-by: Ron Yorston <r...@pobox.com> --- libbb/getopt32.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libbb/getopt32.c b/libbb/getopt32.c index e861d0567..2b87a6179 100644 --- a/libbb/getopt32.c +++ b/libbb/getopt32.c @@ -348,7 +348,6 @@ vgetopt32(char **argv, const char *applet_opts, const char *applet_long_options, unsigned trigger; int min_arg = 0; int max_arg = -1; - int spec_flgs = 0; #define SHOW_USAGE_IF_ERROR 1 @@ -449,9 +448,7 @@ vgetopt32(char **argv, const char *applet_opts, const char *applet_long_options, continue; c = s[1]; if (*s == '?') { - if (c < '0' || c > '9') { - spec_flgs |= SHOW_USAGE_IF_ERROR; - } else { + if (c >= '0' && c <= '9') { max_arg = c - '0'; s++; } @@ -465,8 +462,10 @@ vgetopt32(char **argv, const char *applet_opts, const char *applet_long_options, continue; } if (*s == '=') { - min_arg = max_arg = c - '0'; - s++; + if (c >= '0' && c <= '9') { + min_arg = max_arg = c - '0'; + s++; + } continue; } for (on_off = complementary; on_off->opt_char; on_off++) -- 2.47.0 _______________________________________________ busybox mailing list busybox@busybox.net https://lists.busybox.net/mailman/listinfo/busybox