summaryrefslogtreecommitdiff
path: root/Src/params.c
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2023-02-12 12:20:33 -0800
committerBart Schaefer <schaefer@zsh.org>2023-02-12 12:20:33 -0800
commitf4c706f0c84bddb7777d38635c4ba1d43703e2e5 (patch)
treed9257451957349bf42277b3d355fb04ccb785ff8 /Src/params.c
parentacb15e3cc9af6c5b51e570765e6734e958d32aef (diff)
downloadzsh-f4c706f0c84bddb7777d38635c4ba1d43703e2e5.tar.gz
zsh-f4c706f0c84bddb7777d38635c4ba1d43703e2e5.zip
51417: Check subscripts in named reference values more rigorously.
Diffstat (limited to 'Src/params.c')
-rw-r--r--Src/params.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/Src/params.c b/Src/params.c
index 4910d65fe..f61374b87 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -6281,7 +6281,16 @@ valid_refname(char *val)
if (*t != 0) {
if (*t == '[') {
tokenize(t = dupstring(t+1));
- t = parse_subscript(t, 0, ']');
+ while ((t = parse_subscript(t, 0, ']')) && *t++ == Outbrack) {
+ if (*t == Inbrack)
+ ++t;
+ else
+ break;
+ }
+ if (t && *t) {
+ /* zwarn("%s: stuff after subscript: %s", val, t); */
+ t = NULL;
+ }
} else if (t[1] || !(*t == '!' || *t == '?' ||
*t == '$' || *t == '-' ||
*t == '0' || *t == '_')) {