diff -urpN busybox-1.15.2/editors/awk.c busybox-1.15.2-awk/editors/awk.c --- busybox-1.15.2/editors/awk.c 2009-10-08 02:59:09.000000000 +0200 +++ busybox-1.15.2-awk/editors/awk.c 2009-11-30 02:05:12.000000000 +0100 @@ -2393,12 +2393,14 @@ static var *evaluate(node *op, var *res) case XC( OC_MOVE ): /* if source is a temporary string, jusk relink it to dest */ - if (R.v == v1+1 && R.v->string) { - res = setvar_p(L.v, R.v->string); - R.v->string = NULL; - } else { +//Disabled: if R.v is numeric but happens to have cached R.v->string, +//then L.v ends up being a string, which is wrong +// if (R.v == v1+1 && R.v->string) { +// res = setvar_p(L.v, R.v->string); +// R.v->string = NULL; +// } else { res = copyvar(L.v, R.v); - } +// } break; case XC( OC_TERNARY ): diff -urpN busybox-1.15.2/testsuite/awk.tests busybox-1.15.2-awk/testsuite/awk.tests --- busybox-1.15.2/testsuite/awk.tests 2009-09-26 15:14:57.000000000 +0200 +++ busybox-1.15.2-awk/testsuite/awk.tests 2009-11-30 02:05:12.000000000 +0100 @@ -47,4 +47,21 @@ testing "awk NF in BEGIN" \ ":0::::\n" \ "" "" +prg=' +function b(tmp) { + tmp = 0; + print "" tmp; #this line causes the bug + return tmp; +} +function c(tmpc) { + tmpc = b(); return tmpc; +} +BEGIN { + print (c() ? "string" : "number"); +}' +testing "awk string cast (bug 725)" \ + "awk '$prg'" \ + "0\nnumber\n" \ + "" "" + exit $FAILCOUNT