Applied, thank you

On Thu, Sep 9, 2021 at 9:15 AM Ron Yorston <[email protected]> wrote:
>
> Commit 7d06d6e18 (awk: fix printf %%) can cause awk printf to read
> beyond the end of a strduped buffer:
>
>   2349      while (*f && *f != '%')
>   2350          f++;
>   2351      c = *++f;
>
> If the loop terminates because a NUL character is detected the
> character after the NUL is read.  This can result in failures
> depending on the value of that character.
>
> function                                             old     new   delta
> awk_printf                                           736     706     -30
>
> Signed-off-by: Ron Yorston <[email protected]>
> ---
>  editors/awk.c | 24 +++++++++++++-----------
>  1 file changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/editors/awk.c b/editors/awk.c
> index f7b8ef0d3..3594717b1 100644
> --- a/editors/awk.c
> +++ b/editors/awk.c
> @@ -2348,17 +2348,19 @@ static char *awk_printf(node *n, size_t *len)
>                 s = f;
>                 while (*f && *f != '%')
>                         f++;
> -               c = *++f;
> -               if (c == '%') { /* double % */
> -                       slen = f - s;
> -                       s = xstrndup(s, slen);
> -                       f++;
> -                       goto tail;
> -               }
> -               while (*f && !isalpha(*f)) {
> -                       if (*f == '*')
> -                               syntax_error("%*x formats are not supported");
> -                       f++;
> +               if (*f) {
> +                       c = *++f;
> +                       if (c == '%') { /* double % */
> +                               slen = f - s;
> +                               s = xstrndup(s, slen);
> +                               f++;
> +                               goto tail;
> +                       }
> +                       while (*f && !isalpha(*f)) {
> +                               if (*f == '*')
> +                                       syntax_error("%*x formats are not 
> supported");
> +                               f++;
> +                       }
>                 }
>                 c = *f;
>                 if (!c) {
> --
> 2.31.1
>
> _______________________________________________
> busybox mailing list
> [email protected]
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to