[PATCH] Restrict named directories to scalar parameters set to a path

Philippe Altherr <[email protected]> Fri, 12 Jun 2026 21:51:49 +0200
Newsgroups gmane.comp.shells.zsh.devel
Message-ID <CAGdYchsE0HGgk2VXPU2NANUcO1WfKDmEYmneuxOfU-1ihO0WGA@mail.gmail.com>
The documentation of AUTO_NAME_DIRS
<https://zsh.sourceforge.io/Doc/Release/Options.html#index-AUTO_005fNAME_005fDIRS>
states
that any parameter set to an absolute path becomes a named directory but
currently setting any value turns the parameter into a named directory.

- Restrict named directories to scalar parameters set to a path
<https://github.com/paltherr/zsh/compare/restrict-nameddirs-to-scalars...paltherr:zsh:restrict-nameddirs-to-paths>
(depends on workers/54759 <http://zsh.org/workers/54759>)

Philippe
restrict-nameddirs-to-paths.txt (text/plain, 967 B)
diff --git a/Src/params.c b/Src/params.c
index 8df594837..dce7a1a63 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -3996,7 +3996,8 @@ strsetfn(Param pm, char *x)
     }
     if (!(pm->node.flags & PM_HASHELEM) && !pm->level &&
 	(PM_TYPE(pm->node.flags) == PM_SCALAR) &&
-	((pm->node.flags & PM_NAMEDDIR) || isset(AUTONAMEDIRS))) {
+	((pm->node.flags & PM_NAMEDDIR) ||
+	 (isset(AUTONAMEDIRS) && x && *x == '/'))) {
 	pm->node.flags |= PM_NAMEDDIR;
 	adduserdir(pm->node.nam, x, 0, 0);
     }
diff --git a/Test/K01nameref.ztst b/Test/K01nameref.ztst
index 54fe8565a..b630be050 100644
--- a/Test/K01nameref.ztst
+++ b/Test/K01nameref.ztst
@@ -1601,8 +1601,8 @@ F:previously this could create an infinite recursion and crash
 >nameddirs=( v1 /1 )
 >nameddirs=( v1 /A )
 >nameddirs=( v1 /A v2 /2 r2 /R )
->nameddirs=( v1 /A r2 /R )
->nameddirs=( v1 /A r2 /R )
+>nameddirs=( v1 /A v2 /2 r2 /R )
+>nameddirs=( v1 /A v2 /2 r2 /R )
 >nameddirs=( v1 /A v2 /B r2 /R )
 *?*