diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2013-08-23 21:58:55 +1000 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2020-03-28 21:42:54 +0000 |
commit | f82f85d8be5ced5e6728792fea1a6dc089decf59 (patch) | |
tree | bc030fae2cce06b82ed8ffd5cc618f9224390c64 | |
parent | 285328db698e018ef91c9f04f59f25e3133d0984 (diff) | |
download | klibc-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.c | 10 |
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 |