awk: Fix handling of functions with empty body
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 6 Mar 2013 20:01:05 +0000 (21:01 +0100)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 13 Mar 2013 08:47:07 +0000 (09:47 +0100)
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
editors/awk.c
testsuite/awk.tests

index 3224788..0b573a0 100644 (file)
@@ -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);
index f9c3b6b..dad49c3 100755 (executable)
@@ -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"