From nobody Wed Jul 5 10:39:02 2006 From: Aharon Robbins 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 > 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 * eval.c (interpret): Node_assign_concat case: Turn off NUMBER and NUMCUR flags in result. Sheesh. Thanks to 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