On Wed, 15 Jan 2020 10:30:49 -0600
Martin Lewis <martin.lewis....@gmail.com> wrote:

> Signed-off-by: Martin Lewis <martin.lewis....@gmail.com>
> ---
>  networking/nc_bloaty.c | 21 ++++-----------------
>  1 file changed, 4 insertions(+), 17 deletions(-)
> 
> diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c
> index 034e03d21..9848ea794 100644
> --- a/networking/nc_bloaty.c
> +++ b/networking/nc_bloaty.c
> @@ -237,24 +237,11 @@ static void arm(unsigned secs)
>   Not distinguishing \n vs \r\n for the nonce; it just works as is...
> */ static unsigned findline(char *buf, unsigned siz)
>  {
> -     char * p;
> -     int x;
> -     if (!buf)                        /* various sanity checks...
> */
> -             return 0;
> -     if (siz > BIGSIZ)
> +     char *p;
> +     if (!buf || siz > BIGSIZ)
>               return 0;
> -     x = siz;
> -     for (p = buf; x > 0; x--) {
> -             if (*p == '\n') {
> -                     x = (int) (p - buf);
> -                     x++;                        /* 'sokay if it
> points just past the end! */ -Debug("findline returning %d", x);
> -                     return x;
> -             }
> -             p++;
> -     } /* for */
> -Debug("findline returning whole thing: %d", siz);
> -     return siz;
> +     p = strchr(buf, '\n');

This can give incorrect results, or even crash in certain conditions.
strchr does not have the upper bound 'siz' argument.

memchr could work instead.

> +     return p ? (p - buf + 1) : siz;
>  } /* findline */
>  
>  /* doexec:

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to