diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2013-03-06 21:01:05 +0100 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2013-03-13 09:47:07 +0100 |
commit | b79a0fef99627c457548e804fcd6e162b116cbe8 (patch) | |
tree | 4a0263ef4f231b366fff4cfe700c62d38feaeba5 | |
parent | 7991d45446216c493b00a2936d0682a2be49b684 (diff) | |
download | busybox-w32-b79a0fef99627c457548e804fcd6e162b116cbe8.tar.gz busybox-w32-b79a0fef99627c457548e804fcd6e162b116cbe8.tar.bz2 busybox-w32-b79a0fef99627c457548e804fcd6e162b116cbe8.zip |
awk: Fix handling of functions with empty body
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r-- | editors/awk.c | 3 | ||||
-rwxr-xr-x | testsuite/awk.tests | 19 |
2 files changed, 21 insertions, 1 deletions
diff --git a/editors/awk.c b/editors/awk.c index 3224788c0..0b573a065 100644 --- a/editors/awk.c +++ b/editors/awk.c | |||
@@ -2661,7 +2661,8 @@ static var *evaluate(node *op, var *res) | |||
2661 | var *vbeg, *v; | 2661 | var *vbeg, *v; |
2662 | const char *sv_progname; | 2662 | const char *sv_progname; |
2663 | 2663 | ||
2664 | if (!op->r.f->body.first) | 2664 | /* The body might be empty, still has to eval the args */ |
2665 | if (!op->r.n->info) | ||
2665 | syntax_error(EMSG_UNDEF_FUNC); | 2666 | syntax_error(EMSG_UNDEF_FUNC); |
2666 | 2667 | ||
2667 | vbeg = v = nvalloc(op->r.f->nargs + 1); | 2668 | vbeg = v = nvalloc(op->r.f->nargs + 1); |
diff --git a/testsuite/awk.tests b/testsuite/awk.tests index f9c3b6b4d..dad49c3f5 100755 --- a/testsuite/awk.tests +++ b/testsuite/awk.tests | |||
@@ -25,6 +25,25 @@ testing "awk if string == " "awk 'BEGIN{if(\"a\"==\"ab\") print \"bar\"}'" "" | |||
25 | 25 | ||
26 | # 4294967295 = 0xffffffff | 26 | # 4294967295 = 0xffffffff |
27 | testing "awk bitwise op" "awk '{ print or(4294967295,1) }'" "4.29497e+09\n" "" "\n" | 27 | testing "awk bitwise op" "awk '{ print or(4294967295,1) }'" "4.29497e+09\n" "" "\n" |
28 | |||
29 | # we were testing for a non-empty body when deciding if a function was | ||
30 | # defined or not. The testcase below caused: | ||
31 | # awk: cmd. line:8: Call to undefined function | ||
32 | prg=' | ||
33 | function empty_fun(count) { | ||
34 | # empty | ||
35 | } | ||
36 | END { | ||
37 | i=1 | ||
38 | print "L" i "\n" | ||
39 | empty_fun(i + i + ++i) | ||
40 | print "L" i "\n" | ||
41 | }' | ||
42 | testing "awk handles empty function f(arg){}" \ | ||
43 | "awk '$prg'" \ | ||
44 | "L1\n\nL2\n\n" \ | ||
45 | "" "" | ||
46 | |||
28 | optional DESKTOP | 47 | optional DESKTOP |
29 | testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4.29497e+09\n" "" "\n" | 48 | testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4.29497e+09\n" "" "\n" |
30 | testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2.14748e+09\n" "" "\n" | 49 | testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2.14748e+09\n" "" "\n" |