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

Reply via email to