Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [BUG] ksh_zero_subscript messes with associative arrays



> On 26/07/2022 17:18 Felipe Contreras <felipe.contreras@xxxxxxxxx> wrote:
> The test is very simple:
> 
>     setopt ksh_zero_subscript
>     typeset -A args
>     (( $+args[foo] )) && echo set
> 
> ksh_zero_subscript shouldn't be changing the behavior of the code, correct?

I can't see how it should be having any kind of effect on an associative array,
no

pws

diff --git a/Src/params.c b/Src/params.c
index 27ea82298..f587657c7 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -1996,7 +1996,8 @@ getindex(char **pptr, Value v, int flags)
 		 * altered the start index in getarg().
 		 * Are we being strict?
 		 */
-		if (isset(KSHZEROSUBSCRIPT)) {
+		if (isset(KSHZEROSUBSCRIPT) &&
+		    !(v->pm->node.flags & PM_HASHED)) {
 		    /*
 		     * We're not.
 		     * Treat this as accessing the first element of the
diff --git a/Test/D06subscript.ztst b/Test/D06subscript.ztst
index adbd398c4..2546013a9 100644
--- a/Test/D06subscript.ztst
+++ b/Test/D06subscript.ztst
@@ -224,6 +224,11 @@
 0:(R) yuckily returns the first element on failure with KSH_ZERO_SUBSCRIPT
 >XfimbleX
 
+  typeset -A empty_hash
+  (( $+empty_hash[unset_param] )) || echo Entry is not set
+0:KSH_ZERO_SUBSCRIPT has no effect on hashes
+>Entry is not set
+
   unsetopt KSH_ZERO_SUBSCRIPT
   array[(R)notfound,(r)notfound]=(help help here come the seventies retreads)
   print $array




Messages sorted by: Reverse Date, Date, Thread, Author