Re: [PATCH] libbb: tidy argument checks in getopt32()

2024-12-08 Thread Denys Vlasenko
Applied, thank you.

On Wed, Nov 6, 2024 at 4:14 PM Ron Yorston  wrote:
>
> 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   13071319 +12
>
> Signed-off-by: Ron Yorston 
> ---
>  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
___
busybox mailing list
busybox@busybox.net
https://lists.busybox.net/mailman/listinfo/busybox


[PATCH] libbb: tidy argument checks in getopt32()

2024-11-06 Thread Ron Yorston
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   13071319 +12

Signed-off-by: Ron Yorston 
---
 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