aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-11-30 01:15:04 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-11-30 01:15:04 +0100
commit1284774d60ebce68dec6fcaf44a33e928c4c1f82 (patch)
tree165bc1ec980eca2d30b04d7939bafbf7667fc1b8
parentcdeda16ee4acb78569598e848a491ad595af3abb (diff)
downloadbusybox-w32-1284774d60ebce68dec6fcaf44a33e928c4c1f82.tar.gz
busybox-w32-1284774d60ebce68dec6fcaf44a33e928c4c1f82.tar.bz2
busybox-w32-1284774d60ebce68dec6fcaf44a33e928c4c1f82.zip
awk: fix an incorrect casting to string (bug 725). -44 bytes.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/awk.c14
-rwxr-xr-xtestsuite/awk.tests17
2 files changed, 25 insertions, 6 deletions
diff --git a/editors/awk.c b/editors/awk.c
index e987bc868..bc8b0dad1 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -2424,17 +2424,19 @@ static var *evaluate(node *op, var *res)
2424 X.re = as_regex(op1, &sreg); 2424 X.re = as_regex(op1, &sreg);
2425 R.i = regexec(X.re, L.s, 0, NULL, 0); 2425 R.i = regexec(X.re, L.s, 0, NULL, 0);
2426 if (X.re == &sreg) regfree(X.re); 2426 if (X.re == &sreg) regfree(X.re);
2427 setvar_i(res, (R.i == 0 ? 1 : 0) ^ (opn == '!' ? 1 : 0)); 2427 setvar_i(res, (R.i == 0) ^ (opn == '!'));
2428 break; 2428 break;
2429 2429
2430 case XC( OC_MOVE ): 2430 case XC( OC_MOVE ):
2431 /* if source is a temporary string, jusk relink it to dest */ 2431 /* if source is a temporary string, jusk relink it to dest */
2432 if (R.v == v1+1 && R.v->string) { 2432//Disabled: if R.v is numeric but happens to have cached R.v->string,
2433 res = setvar_p(L.v, R.v->string); 2433//then L.v ends up being a string, which is wrong
2434 R.v->string = NULL; 2434// if (R.v == v1+1 && R.v->string) {
2435 } else { 2435// res = setvar_p(L.v, R.v->string);
2436// R.v->string = NULL;
2437// } else {
2436 res = copyvar(L.v, R.v); 2438 res = copyvar(L.v, R.v);
2437 } 2439// }
2438 break; 2440 break;
2439 2441
2440 case XC( OC_TERNARY ): 2442 case XC( OC_TERNARY ):
diff --git a/testsuite/awk.tests b/testsuite/awk.tests
index 2c7642ce0..7910c8875 100755
--- a/testsuite/awk.tests
+++ b/testsuite/awk.tests
@@ -47,4 +47,21 @@ testing "awk NF in BEGIN" \
47 ":0::::\n" \ 47 ":0::::\n" \
48 "" "" 48 "" ""
49 49
50prg='
51function b(tmp) {
52 tmp = 0;
53 print "" tmp; #this line causes the bug
54 return tmp;
55}
56function c(tmpc) {
57 tmpc = b(); return tmpc;
58}
59BEGIN {
60 print (c() ? "string" : "number");
61}'
62testing "awk string cast (bug 725)" \
63 "awk '$prg'" \
64 "0\nnumber\n" \
65 "" ""
66
50exit $FAILCOUNT 67exit $FAILCOUNT