Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [PATCH] Restrict named directories to scalar parameters.
- X-seq: zsh-workers 54792
- From: Philippe Altherr <philippe.altherr@xxxxxxxxx>
- To: Mikael Magnusson <mikachu@xxxxxxxxx>, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- Cc: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Re: [PATCH] Restrict named directories to scalar parameters.
- Date: Tue, 16 Jun 2026 22:43:38 +0200
- Arc-authentication-results: i=1; mx.google.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ZyAaiMcOA79sa8MPiMsvWo0L+Ykttd1aGFkIGe0X02c=; fh=+qicHBH031HSvKyM3xGaEef3LG6DdV0X9Kj7j418Qlw=; b=i5ZYzdVVSr8XcxoCZ/W/E2bmrIQnjXL7Fh/gassaDaNRE9GpaNhZnZW+/Pn4ZF/6A9 sDW9JKp9WrlSE74+bvAt72VfLGM2pq2ixXOeA6/EDvhd3VMV0tgdFMwB+bW/mu/PWr7M c/pt6GKqzdq6i0wfBtoF5o7PSasyEg8XODL1CuUWt+FoKEEeLmQ6R+BfsKRLoTpZV6Jn 9pTGvY3L/LfPj16uA4d3GrSOQQ1Lfw/bc8FxJ4qjeZWKoBHiUBpPs71VKQmA1BKIuhCi X4u0gkiAz8iIfq7W6stjw4yTa8bI5c6+sxtfIbFwqw7Or8ZgnlFhrmlUkJ+5c+2tDgg6 k/1A==; darn=zsh.org
- Arc-seal: i=1; a=rsa-sha256; t=1781642631; cv=none; d=google.com; s=arc-20240605; b=gATb3/Bv/9tm6yC10tJSuWgdTCQAXfl2Kqkyi2fN8F9E94BcFwXOI2PK46V8n+FOTA rXuXbUy2u/k1fXrgM6yBilxB6O2oSYVm9nRB4uv5pwnhVluukvRT0MkMiu8BYHr2sxUY a7h8l/PJ6xCr9dtWgQFU52vjdPttudbnD7BSNm1gYHf2hiGsnkSjJ+B54dXs88CadRpc 092IFVIjhu9yHqJ/RSrq5PjkUKywnyMH4lTB/I0raFXbRU26Shn4jS/INLFgHhv13HBP QZlslquL6BoR4FTq4nos8tsIxBFCkKuGQx6ZO3YZQ9v0U2+o4RDPL3yyDoSxDO1YP2u+ JmxA==
- Archived-at: <https://zsh.org/workers/54792>
- In-reply-to: <CAGdYchs+w_P1iS9o70gWKvoweuamWRb=9923RuAYGKURt32=pA@mail.gmail.com>
- List-id: <zsh-workers.zsh.org>
- References: <CAGdYchsYTam9E4+h1nB2otg+5CDGki_57knH-=W+WAY6UiKGaA@mail.gmail.com> <CAH+w=7aHe64BUd6BMa7nbEnRXWEvTeSshUXZka+n_dA4DfvNBw@mail.gmail.com> <CAGdYchsJEQOh57xfSXhJtEXefw3q=fOM8dQa0FmGRNa6eWXv4Q@mail.gmail.com> <CAHYJk3T9yT4Y_sfMCZ9zwsyuGFpRBdCaiQV76fAkA6rx1mapfw@mail.gmail.com> <CAH+w=7bdOfH_2u+Evwi5gKvU3HCX3YFgrvOg4LZ=G2XachFGvQ@mail.gmail.com> <CAGdYchs+w_P1iS9o70gWKvoweuamWRb=9923RuAYGKURt32=pA@mail.gmail.com>
Here is an updated patch where the test uses the null PS1 trick.
Philippe
diff --git a/Src/params.c b/Src/params.c
index e5bbe9cb9..8df594837 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -3975,7 +3975,7 @@ floatsetfn(Param pm, double x)
pm->u.dval = x;
}
-/* Function to get value of a scalar (string) parameter */
+/* Function to get value of a scalar (string) or nameref parameter */
/**/
mod_export char *
@@ -3984,7 +3984,7 @@ strgetfn(Param pm)
return pm->u.str ? pm->u.str : (char *) hcalloc(1);
}
-/* Function to set value of a scalar (string) parameter */
+/* Function to set value of a scalar (string) or nameref parameter */
/**/
mod_export void
@@ -3995,6 +3995,7 @@ strsetfn(Param pm, char *x)
pm->u.str = 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;
adduserdir(pm->node.nam, x, 0, 0);
diff --git a/Test/K01nameref.ztst b/Test/K01nameref.ztst
index 6cfe6d1d0..d8f7915e4 100644
--- a/Test/K01nameref.ztst
+++ b/Test/K01nameref.ztst
@@ -1575,6 +1575,36 @@ F:previously this could create an infinite recursion and crash
>typeset PS1=zz
*?*
+# Testing named directories requires to run in interactive mode
+
+ PS1= $ZTST_testdir/../Src/zsh -fis <<<'
+ typeset v1=/1 v2
+ typeset -n r1=v1 r2
+ { echo "~v1:" ~v1 } 2>&1
+ { echo "~r1:" ~r1 } 2>&1
+ echo "nameddirs=( ${(kv)nameddirs} )"
+ r1=/A
+ echo "nameddirs=( ${(kv)nameddirs} )"
+ hash -d v2=/2 r2=/R
+ echo "nameddirs=( ${(kv)nameddirs} )"
+ setopt autonamedirs
+ v2=V2
+ echo "nameddirs=( ${(kv)nameddirs} )"
+ r2=v2
+ echo "nameddirs=( ${(kv)nameddirs} )"
+ r2=/B
+ echo "nameddirs=( ${(kv)nameddirs} )"
+ '
+0:Only string parameters are promoted to named directories
+>~v1: /1
+>zsh: no such user or named directory: r1
+>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 /B r2 /R )
+
unset var1 var2
typeset -n ref1=var1
() {
Messages sorted by:
Reverse Date,
Date,
Thread,
Author