From 175b8dda19022f5ca5b81f87248924817e7ea1cf Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Wed, 6 Nov 2024 15:14:41 +0000 Subject: libbb: tidy argument checks in getopt32() 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 Signed-off-by: Denys Vlasenko --- libbb/getopt32.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libbb/getopt32.c b/libbb/getopt32.c index e861d0567..a8dd85159 100644 --- a/libbb/getopt32.c +++ b/libbb/getopt32.c @@ -348,9 +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 on_off = complementary; memset(on_off, 0, sizeof(complementary)); @@ -449,9 +446,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 +460,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++) -- cgit v1.2.3-55-g6feb