summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2017-05-08 18:00:55 +0100
committerPeter Stephenson <pws@zsh.org>2017-05-08 18:00:55 +0100
commitaf1c82d646d2f1fa9cecbfcffd0159cc3cebe237 (patch)
tree14d2e3c92dec4c12afc753cccd4e8f301823f17f
parent641a764b8203de5e5f5c9f1d6d5b0a48c26ca9e7 (diff)
downloadzsh-af1c82d646d2f1fa9cecbfcffd0159cc3cebe237.tar.gz
zsh-af1c82d646d2f1fa9cecbfcffd0159cc3cebe237.zip
40173: Off-by-one error checking for {varid}.
This caused a single unprintable character in braces before a redirection to be treated as an indentifier.
-rw-r--r--ChangeLog3
-rw-r--r--Src/parse.c2
-rw-r--r--Test/A04redirect.ztst9
3 files changed, 13 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8ac6df15e..bc7f3d7bb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2017-05-08 Peter Stephenson <p.stephenson@samsung.com>
+ * 41073: Src/parse.c, Test/A04redirect.ztst: off-by-one error
+ checking for {varid} syntax.
+
* users/22688: Src/parse.c, Test/A04redirect.ztst: Allow mixing
of redirections and arguments after anonymous functions.
diff --git a/Src/parse.c b/Src/parse.c
index b0de9a863..8769baae4 100644
--- a/Src/parse.c
+++ b/Src/parse.c
@@ -1836,7 +1836,7 @@ par_simple(int *cmplx, int nr)
if (*ptr == Outbrace && ptr > tokstr + 1)
{
- if (itype_end(tokstr+1, IIDENT, 0) >= ptr - 1)
+ if (itype_end(tokstr+1, IIDENT, 0) >= ptr)
{
char *toksave = tokstr;
char *idstring = dupstrpfx(tokstr+1, eptr-tokstr-1);
diff --git a/Test/A04redirect.ztst b/Test/A04redirect.ztst
index 2671080c2..cb82751ce 100644
--- a/Test/A04redirect.ztst
+++ b/Test/A04redirect.ztst
@@ -165,6 +165,15 @@
?About to close a second time
*?\(eval\):*: failed to close file descriptor *
+ eval $'fn-varid() { print {\x18}<<0 }'
+ { which -x2 fn-varid; fn-varid } | tr $'\x18' '?'
+0:Regression test for off-by-one in varid check
+>fn-varid () {
+> print {?} <<0
+>0
+>}
+>{?}
+
print foo >&-
0:'>&-' redirection