diff options
author | Bart Schaefer <schaefer@zsh.org> | 2023-02-12 12:20:33 -0800 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2023-02-12 12:20:33 -0800 |
commit | f4c706f0c84bddb7777d38635c4ba1d43703e2e5 (patch) | |
tree | d9257451957349bf42277b3d355fb04ccb785ff8 /Src | |
parent | acb15e3cc9af6c5b51e570765e6734e958d32aef (diff) | |
download | zsh-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.c | 11 |
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 == '_')) { |