Applied, thank you!

On Fri, Dec 22, 2023 at 4:18 PM M Rubon <rubon...@gmail.com> wrote:
>
> I wanted to resend this, tagging that there is a one-line patch included
>
> diff --git a/editors/awk.c b/editors/awk.c
> index bc95c4155..60b8276e7 100644
> --- a/editors/awk.c
> +++ b/editors/awk.c
> @@ -1983,3 +1983,3 @@ static void fsrealloc(int size)
>                 for (; i < maxfields; i++) {
> -                       Fields[i].type = VF_SPECIAL;
> +                       Fields[i].type = VF_SPECIAL | VF_DIRTY;
>                         Fields[i].string = NULL;
>
> Mike
>
>
> On Fri, 15 Dec 2023 at 00:07, M Rubon <rubon...@gmail.com> wrote:
> >
> > Busybox awk handles references to empty (not provided in the input)
> > fields differently during the first line of input, as compared to
> > subsequent lines.
> >
> > root@clean2305:~# (echo a ; echo b) | awk '$2 != 0'    #wrong
> > b
> >
> > No field $2 value is provided in the input.  When awk references field
> > $2 for the "a" line, it is seen to have a different behaviour than
> > when it is referenced for the "b" line.
> >
> > Problem in BusyBox v1.36.1 embedded in OpenWrt 23.05.0
> > Same problem also in 21.02 versions of OpenWrt
> > Same problem in BusyBox v1.37.0.git
> >
> > I get the correct expected output from Ubuntu gawk and Debian mawk,
> > and from my fix.
> > will@dev:~$ (echo a ; echo b) | awk '$2 != 0'  #correct
> > a
> > b
> > will@dev:~/busybox$ (echo a ; echo b ) | ./busybox awk '$2 != 0'  #fixed
> > a
> > b
> >
> > I built and poked into the source code at editors/awk.c  The function
> > fsrealloc(int size) is core to allocating, initializing, reallocating,
> > and reinitializing fields, both real input line fields and imaginary
> > fields that the script references but do not exist in the input.
> >
> > When fsrealloc() needs more field space than it has previously
> > allocated, it initializes those new fields differently than how they
> > are later reinitialized for the next input line.  This works fine for
> > fields defined in the input, like $1, but does not work the first time
> > when there is no input for that field (e.g. field $99)
> >
> > My one-line fix simply makes the initialization and clrvar()
> > reinitialization use the same value for .type.  I am not sure if there
> > are regression tests to run, but I have not done those.
> >
> > I'm not sure if I understand why clrvar() is not setting .type to a
> > default constant value, but in any case I have left that untouched.
> >
> > I am a happy busybox user.  Thank you very much for your work on the system!
> >
> > M
> >
> >
> > diff --git a/editors/awk.c b/editors/awk.c
> > index bc95c4155..60b8276e7 100644
> > --- a/editors/awk.c
> > +++ b/editors/awk.c
> > @@ -1981,7 +1981,7 @@ static void fsrealloc(int size)
> >                 /* ^^^ did Fields[] move? debug aid for L.v getting
> > "upstaged" by R.v in evaluate() */
> >
> >                 for (; i < maxfields; i++) {
> > -                       Fields[i].type = VF_SPECIAL;
> > +                       Fields[i].type = VF_SPECIAL | VF_DIRTY;
> >                         Fields[i].string = NULL;
> >                 }
> >         }
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to