diff options
author | Bart Schaefer <schaefer@zsh.org> | 2025-03-31 15:25:34 -0700 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2025-03-31 15:25:34 -0700 |
commit | e7163e69d90f8dcd5cdeea054df929b635f89260 (patch) | |
tree | fcc4c39b74fe2ffd8685bd12d072febaf147883a /Src | |
parent | b707a60351bb9224fb808b3155dfef3288eef039 (diff) | |
download | zsh-e7163e69d90f8dcd5cdeea054df929b635f89260.tar.gz zsh-e7163e69d90f8dcd5cdeea054df929b635f89260.zip |
53431: fix assignment via named reference to parameters in outer scopes
Diffstat (limited to 'Src')
-rw-r--r-- | Src/params.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Src/params.c b/Src/params.c index d1c06b893..c10236a0d 100644 --- a/Src/params.c +++ b/Src/params.c @@ -6395,7 +6395,9 @@ setscope(Param pm) } } else pm->base = basepm->level; - } + } else if (pm->base < locallevel && refname && + (basepm = (Param)getparamnode(realparamtab, refname))) + pm->base = basepm->level; if (pm->base > pm->level) { if (EMULATION(EMULATE_KSH)) { zerr("%s: global reference cannot refer to local variable", @@ -6420,6 +6422,8 @@ upscope(Param pm, int reflevel) { Param up = pm->old; while (up && up->level >= reflevel) { + if (reflevel < 0 && up->level < locallevel) + break; pm = up; up = up->old; } |