[PATCH] libbb: tidy argument checks in getopt32()
Ron Yorston
rmy at pobox.com
Wed Nov 6 15:14:41 UTC 2024
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>
---
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
More information about the busybox
mailing list