summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2013-03-06 20:01:05 (GMT)
committer Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>2013-03-13 08:47:07 (GMT)
commitb79a0fef99627c457548e804fcd6e162b116cbe8 (patch)
tree4a0263ef4f231b366fff4cfe700c62d38feaeba5
parent7991d45446216c493b00a2936d0682a2be49b684 (diff)
downloadbusybox-b79a0fef99627c457548e804.tar.gz
busybox-b79a0fef99627c457548e804.tar.bz2
awk: Fix handling of functions with empty body
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--editors/awk.c3
-rwxr-xr-xtestsuite/awk.tests19
2 files changed, 21 insertions, 1 deletions
diff --git a/editors/awk.c b/editors/awk.c
index 3224788..0b573a0 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -2661,7 +2661,8 @@ static var *evaluate(node *op, var *res)
var *vbeg, *v;
const char *sv_progname;
- if (!op->r.f->body.first)
+ /* The body might be empty, still has to eval the args */
+ if (!op->r.n->info)
syntax_error(EMSG_UNDEF_FUNC);
vbeg = v = nvalloc(op->r.f->nargs + 1);
diff --git a/testsuite/awk.tests b/testsuite/awk.tests
index f9c3b6b..dad49c3 100755
--- a/testsuite/awk.tests
+++ b/testsuite/awk.tests
@@ -25,6 +25,25 @@ testing "awk if string == " "awk 'BEGIN{if(\"a\"==\"ab\") print \"bar\"}'" ""
# 4294967295 = 0xffffffff
testing "awk bitwise op" "awk '{ print or(4294967295,1) }'" "4.29497e+09\n" "" "\n"
+
+# we were testing for a non-empty body when deciding if a function was
+# defined or not. The testcase below caused:
+# awk: cmd. line:8: Call to undefined function
+prg='
+function empty_fun(count) {
+ # empty
+}
+END {
+ i=1
+ print "L" i "\n"
+ empty_fun(i + i + ++i)
+ print "L" i "\n"
+}'
+testing "awk handles empty function f(arg){}" \
+ "awk '$prg'" \
+ "L1\n\nL2\n\n" \
+ "" ""
+
optional DESKTOP
testing "awk hex const 1" "awk '{ print or(0xffffffff,1) }'" "4.29497e+09\n" "" "\n"
testing "awk hex const 2" "awk '{ print or(0x80000000,1) }'" "2.14748e+09\n" "" "\n"