summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilippe Altherr <philippe.altherr@gmail.com>2026-06-08 14:46:19 -0700
committerBart Schaefer <schaefer@zsh.org>2026-06-08 14:46:19 -0700
commit501d393732f4d2100ed15750f95d984078eafb5e (patch)
tree9aa704d6fc01b538251944626911ded90ddfc487
parentunposted: fix NULL termination in ksh93 (diff)
downloadzsh-501d393732f4d2100ed15750f95d984078eafb5e.tar
zsh-501d393732f4d2100ed15750f95d984078eafb5e.tar.gz
zsh-501d393732f4d2100ed15750f95d984078eafb5e.tar.bz2
zsh-501d393732f4d2100ed15750f95d984078eafb5e.tar.lz
zsh-501d393732f4d2100ed15750f95d984078eafb5e.tar.xz
zsh-501d393732f4d2100ed15750f95d984078eafb5e.tar.zst
zsh-501d393732f4d2100ed15750f95d984078eafb5e.zip
54277: reference loops are detected at create time, remove loop tagging
-rw-r--r--Src/params.c10
1 files changed, 1 insertions, 9 deletions
diff --git a/Src/params.c b/Src/params.c
index 1620b2a11..0af508a3f 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -6324,19 +6324,11 @@ resolve_nameref_rec(Param pm, const Param stop, int keep_lastref)
/* If present, it has to be the end of any chain, see fetchvalue() */
|| pm->width || !(refname = GETREFNAME(pm)) || !*refname)
return pm;
- if (pm->node.flags & PM_TAGGED) {
- zerr("%s: invalid self reference", pm->node.nam);
- return NULL;
- }
queue_signals();
if ((pm = (Param)gethashnode2(realparamtab, refname))) {
if ((pm = loadparamnode(paramtab, upscope(pm, ref), refname)) &&
- pm != stop && !(pm->node.flags & PM_UNSET)) {
- /* user can't tag a nameref, safe for loop detection */
- ref->node.flags |= PM_TAGGED;
+ pm != stop && !(pm->node.flags & PM_UNSET))
pm = resolve_nameref_rec(pm, stop, keep_lastref);
- ref->node.flags &= ~PM_TAGGED;
- }
} else if (keep_lastref)
pm = ref;
unqueue_signals();