9front - general discussion about 9front
 help / color / mirror / Atom feed
From: Steve Simon <steve@quintile.net>
To: 9front@9front.org
Subject: Re: [9front] werc memory over flow
Date: Sat, 12 Mar 2022 13:27:07 +0000	[thread overview]
Message-ID: <C5AF8865-7335-46CE-A101-EE8F1DF9501C@quintile.net> (raw)
In-Reply-To: <CC7138DE00DDE7F6259D949AFAE27A21@felloff.net>

forward the fix to mr kernighan - perhaps you will get a prize? ;-)

-Steve

> On 12 Mar 2022, at 11:58 am, cinap_lenrek@felloff.net wrote:
> 
> actually, i think i found it (by staring at the code).
> 
> the code at the done label was unconditionally inserting
> NUL terminator, without the final adjbuf() ensuring
> theres space for it.
> 
> the patch gets rid of the label, so we wont skip the
> final adjbuf().
> 
> diff d52f25ecdcf1dc8ee8d278c8da44159d82d8dd8f uncommitted
> --- a/sys/src/cmd/awk/run.c
> +++ b/sys/src/cmd/awk/run.c
> @@ -1934,7 +1934,7 @@
>                    }
>                }
>                if (*c == 0)    /* at end */
> -                    goto done;
> +                    break;
>                adjbuf(&buf, &bufsz, 2+pb-buf, recsize, &pb, "gsub");
>                *pb++ = *c++;
>                if (pb > buf + bufsz)    /* BUG: not sure of this test */
> @@ -1962,8 +1962,12 @@
>                        *pb++ = *sptr++;
>                }
>                c = patbeg + patlen;
> -                if ((c[-1] == 0) || (*c == 0))
> -                    goto done;
> +                if (c[-1] == 0){
> +                    c--;
> +                    break;
> +                }
> +                if (*c == 0)
> +                    break;
>                if (pb > buf + bufsz)
>                    FATAL("gsub result1 %.30s too big; can't happen", buf);
>                mflag = 1;
> @@ -1973,7 +1977,7 @@
>        adjbuf(&buf, &bufsz, 1+strlen(sptr)+pb-buf, 0, &pb, "gsub");
>        while ((*pb++ = *sptr++) != 0)
>            ;
> -    done:    if (pb > buf + bufsz)
> +        if (pb > buf + bufsz)
>            FATAL("gsub result2 %.30s too big; can't happen", buf);
>        *pb = '\0';
>        setsval(x, buf);    /* BUG: should be able to avoid copy + free */
> 
> --
> cinap

  parent reply	other threads:[~2022-03-12 13:35 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-11  6:24 william
2022-03-11  6:33 ` ori
2022-03-11 15:18 ` ori
2022-03-12 11:23   ` cinap_lenrek
2022-03-12 11:54     ` cinap_lenrek
2022-03-12 12:34       ` cinap_lenrek
2022-03-13  7:27         ` william
2022-03-13 21:16           ` cinap_lenrek
2022-03-12 13:27       ` Steve Simon [this message]
2022-03-12 14:38         ` Steffen Nurpmeso
2022-03-11 16:49 ` Nick Owens
2022-03-11 20:13 ` cinap_lenrek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=C5AF8865-7335-46CE-A101-EE8F1DF9501C@quintile.net \
    --to=steve@quintile.net \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).