aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2013-08-23 21:58:55 +1000
committerBen Hutchings <ben@decadent.org.uk>2020-03-28 21:42:54 +0000
commitf82f85d8be5ced5e6728792fea1a6dc089decf59 (patch)
treebc030fae2cce06b82ed8ffd5cc618f9224390c64
parent285328db698e018ef91c9f04f59f25e3133d0984 (diff)
downloadklibc-f82f85d8be5ced5e6728792fea1a6dc089decf59.tar.gz
[klibc] dash: [BUILTIN] Fixed argument parsing crash in test
[ dash commit b34499f5c851d1a70db95b56bd02eff0329d4a1a ] 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> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--usr/dash/bltin/test.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/usr/dash/bltin/test.c b/usr/dash/bltin/test.c
index 90135e14e1bd5..baa91a57430c2 100644
--- a/usr/dash/bltin/test.c
+++ b/usr/dash/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