summary refs log tree commit diff
path: root/src/bltin
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2013-08-23 21:58:55 +1000
committerHerbert Xu <herbert@gondor.apana.org.au>2013-08-23 21:58:55 +1000
commitb34499f5c851d1a70db95b56bd02eff0329d4a1a (patch)
treedff6c533f2c9067e37ccb45fb4b4c36247134227 /src/bltin
parent[VAR] Initialise OPTIND after importing environment (diff)
downloaddash-b34499f5c851d1a70db95b56bd02eff0329d4a1a.tar.gz
dash-b34499f5c851d1a70db95b56bd02eff0329d4a1a.zip
[BUILTIN] Fixed argument parsing crash in test
When nexpr gets an unexpected EOI, this may cause crashes further
up the call chain because we've advanced t_wp too far.  Fix it by
checking for EOI in nexpr and only advancing t_wp if we've got more
arguments.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src/bltin')
-rw-r--r--src/bltin/test.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/bltin/test.c b/src/bltin/test.c
index 90135e1..baa91a5 100644
--- a/src/bltin/test.c
+++ b/src/bltin/test.c
@@ -268,9 +268,13 @@ aexpr(enum token n)
 static int
 nexpr(enum token n)
 {
-	if (n == UNOT)
-		return !nexpr(t_lex(++t_wp));
-	return primary(n);
+	if (n != UNOT)
+		return primary(n);
+
+	n = t_lex(t_wp + 1);
+	if (n != EOI)
+		t_wp++;
+	return !nexpr(n);
 }
 
 static int