diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2013-08-23 21:58:55 +1000 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2013-08-23 21:58:55 +1000 |
commit | b34499f5c851d1a70db95b56bd02eff0329d4a1a (patch) | |
tree | dff6c533f2c9067e37ccb45fb4b4c36247134227 | |
parent | [VAR] Initialise OPTIND after importing environment (diff) | |
download | dash-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>
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | src/bltin/test.c | 10 |
2 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index 4276676..2a39e34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * Propagate EXP_QPAT in subevalvar. * Initialise OPTIND after importing environment. + * Fixed argument parsing crash in test. 2013-03-12 Peter Rosin <peda@lysator.liu.se> 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 |