[git commit] libbb: tidy argument checks in getopt32()

Denys Vlasenko vda.linux at googlemail.com
Mon Dec 9 01:16:44 UTC 2024


commit: https://git.busybox.net/busybox/commit/?id=175b8dda19022f5ca5b81f87248924817e7ea1cf
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

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 <rmy at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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++)


More information about the busybox-cvs mailing list