gawk/numeric-conversion.diff

70 lines
2.0 KiB
Diff

From nobody Wed Jul 5 10:39:02 2006
From: Aharon Robbins <arnold@skeeve.com>
Subject: Re: conversion error
To: bug-gawk@gnu.org, Heiner.Marxen@DrB.Insel.DE
Cc:
Date: Tue, 04 Jul 2006 22:46:47 +0300
Greetings. Re this:
> Date: Tue, 04 Jul 2006 21:06:14 +0200 (MEST)
> From: Heiner Marxen <Heiner.Marxen@DrB.Insel.DE>
> Subject: conversion error
> To: bug-gawk@gnu.org
>
> Hello,
>
> The following awk script fails for gawk 3.1.4 and 3.1.5.
> Older versions did not do this, but I cannot say, how old they were.
>
> BEGIN {
> if( 0 ) { #ok
> t = "8"
> }else { #fails
> t = ""
> t = t "8"
> }
> printf("8 = %d\n", 0+t) # ok without this line
> t = t "8" # does not invalidate numeric interpretation
> printf("88 = %s\n", 0+t)
> ## The above prints "88 = 8" with gawk 3.1.4 and 3.1.5
> }
>
> The following one-liner already exhibits the bug:
>
> gawk 'BEGIN{t=""; t=t "8";printf("8=%d\n", 0+t);t=t "8";printf("88=%s\n", 0+t)}'
>
>
> Preliminary observation: under somewhat strange conditions a variable
> does retain its numeric interpretation although something is appended to it.
> --
> Heiner Marxen http://www.drb.insel.de/~heiner/
This is an excellent bug report and test case. Much thanks. The following
patch fixes the problem.
Arnold
----------------------------------------------------
Tue Jul 4 22:43:05 2006 Arnold D. Robbins <arnold@skeeve.com>
* eval.c (interpret): Node_assign_concat case: Turn off NUMBER and NUMCUR
flags in result. Sheesh. Thanks to <Heiner.Marxen@DrB.Insel.DE> for finding
the problem.
--- ../gawk-3.1.5/eval.c 2005-07-26 21:07:43.000000000 +0300
+++ eval.c 2006-07-04 22:41:25.000000000 +0300
@@ -1186,6 +1187,7 @@
unref(*lhs);
*lhs = make_str_node(nval, l->stlen + r->stlen, ALREADY_MALLOCED);
}
+ (*lhs)->flags &= ~(NUMCUR|NUMBER);
free_temp(r);
if (after_assign)
_______________________________________________
bug-gnu-utils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-gnu-utils