[PATCH] awk: Fix segfault on for loop syntax error

Brian Foley bpfoley at google.com
Sat Oct 15 13:45:40 UTC 2016


Parsing "for()" segfaults as awk fails to find loop iteration expressions.

Signed-off-by: Brian Foley <bpfoley at google.com>
---
 editors/awk.c       | 2 +-
 testsuite/awk.tests | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/editors/awk.c b/editors/awk.c
index d0269b9..685e8be 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -1514,7 +1514,7 @@ static void chain_group(void)
 			next_token(TC_SEQSTART);
 			n2 = parse_expr(TC_SEMICOL | TC_SEQTERM);
 			if (t_tclass & TC_SEQTERM) {	/* for-in */
-				if ((n2->info & OPCLSMASK) != OC_IN)
+				if (!n2 || (n2->info & OPCLSMASK) != OC_IN)
 					syntax_error(EMSG_UNEXP_TOKEN);
 				n = chain_node(OC_WALKINIT | VV);
 				n->l.n = n2->l.n;
diff --git a/testsuite/awk.tests b/testsuite/awk.tests
index adab4ae..82937bc 100755
--- a/testsuite/awk.tests
+++ b/testsuite/awk.tests
@@ -316,6 +316,9 @@ testing "awk continue" \
 	"" \
 	'BEGIN { if (1) continue; else a = 1 }'
 
+testing "awk handles invalid for loop" \
+    "awk '{ for() }' 2>&1" "awk: cmd. line:1: Unexpected token\n" "" ""
+
 # testing "description" "command" "result" "infile" "stdin"
 
 exit $FAILCOUNT
-- 
2.7.4



More information about the busybox mailing list