diff options
author | Barton E. Schaefer <schaefer@zsh.org> | 2015-07-15 17:51:41 -0700 |
---|---|---|
committer | Barton E. Schaefer <schaefer@zsh.org> | 2015-07-15 17:51:41 -0700 |
commit | a0862f6381979b165e864e9c5b97d12432d35d48 (patch) | |
tree | c5f6626314b30ee58915047440c98e5522c1f89f /Src | |
parent | b6a2f116a1ebd403b9cd1967a7eae6b634bba6a5 (diff) | |
download | zsh-a0862f6381979b165e864e9c5b97d12432d35d48.tar.gz zsh-a0862f6381979b165e864e9c5b97d12432d35d48.tar.xz zsh-a0862f6381979b165e864e9c5b97d12432d35d48.zip |
35799: with NO_EXEC, parse parameter subscript expressions
Diffstat (limited to 'Src')
-rw-r--r-- | Src/params.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/Src/params.c b/Src/params.c index 3b757359b..7d0c8525e 100644 --- a/Src/params.c +++ b/Src/params.c @@ -1116,14 +1116,12 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w, Patprog pprog = NULL; /* - * If in NO_EXEC mode, the parameters won't be set up - * properly, so there's no point even doing any sanity checking. - * Just return 0 now. + * If in NO_EXEC mode, the parameters won't be set up properly, + * so just pretend everything is a hash for subscript parsing */ - if (unset(EXECOPT)) - return 0; - ishash = (v->pm && PM_TYPE(v->pm->node.flags) == PM_HASHED); + ishash = (unset(EXECOPT) || + (v->pm && PM_TYPE(v->pm->node.flags) == PM_HASHED)); if (prevcharlen) *prevcharlen = 1; if (nextcharlen) @@ -1278,8 +1276,18 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w, } if (!c) return 0; - s = dupstrpfx(s, t - s); *str = tt = t; + + /* + * If in NO_EXEC mode, the parameters won't be set up properly, + * so there's no additional sanity checking we can do. + * Just return 0 now. + */ + if (unset(EXECOPT)) + return 0; + + s = dupstrpfx(s, t - s); + /* If we're NOT reverse subscripting, strip the inull()s so brackets * * are not backslashed after parsestr(). Otherwise leave them alone * * so that the brackets will be escaped when we patcompile() or when * |