about summary refs log tree commit diff
path: root/Src
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
parentacb15e3cc9af6c5b51e570765e6734e958d32aef (diff)
downloadzsh-f4c706f0c84bddb7777d38635c4ba1d43703e2e5.tar.gz
zsh-f4c706f0c84bddb7777d38635c4ba1d43703e2e5.tar.xz
zsh-f4c706f0c84bddb7777d38635c4ba1d43703e2e5.zip
51417: Check subscripts in named reference values more rigorously.
Diffstat (limited to 'Src')
-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 == '_')) {