bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Bash-5.1 Official patch 4


From: Chet Ramey
Subject: Bash-5.1 Official patch 4
Date: Sat, 19 Dec 2020 14:35:28 -0500

                             BASH PATCH REPORT
                             =================

Bash-Release:   5.1
Patch-ID:       bash51-004

Bug-Reported-by:        oguzismailuysal@gmail.com
Bug-Reference-ID:       
<CAH7i3LoHGmwaghDpCWRUfcY04gQmeDTH3RiG=bf2b=KbU=gyhw@mail.gmail.com>
Bug-Reference-URL:      
https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00039.html

Bug-Description:

If a key-value compound array assignment to an associative array is supplied
as an assignment statement argument to the `declare' command that declares the
array, the assignment doesn't perform the correct word expansions.

This patch makes key-value assignment and subscript assignment perform the
same expansions when they're supplied as an argument to `declare'.

Patch (apply with `patch -p0'):

*** ../bash-5.1-patched/arrayfunc.c     2020-10-09 11:38:58.000000000 -0400
--- arrayfunc.c 2020-12-11 15:12:22.000000000 -0500
***************
*** 598,601 ****
--- 598,622 ----
      }
  }
+ 
+ /* Return non-zero if L appears to be a key-value pair associative array
+    compound assignment. */ 
+ int
+ kvpair_assignment_p (l)
+      WORD_LIST *l;
+ {
+   return (l && (l->word->flags & W_ASSIGNMENT) == 0 && l->word->word[0] != 
'[');      /*]*/
+ }
+ 
+ char *
+ expand_and_quote_kvpair_word (w)
+      char *w;
+ {
+   char *t, *r;
+ 
+   t = w ? expand_assignment_string_to_string (w, 0) : 0;
+   r = sh_single_quote (t ? t : "");
+   free (t);
+   return r;
+ }
  #endif
       
***************
*** 641,645 ****
  
  #if ASSOC_KVPAIR_ASSIGNMENT
!   if (assoc_p (var) && nlist && (nlist->word->flags & W_ASSIGNMENT) == 0 && 
nlist->word->word[0] != '[')      /*]*/
      {
        iflags = flags & ~ASS_APPEND;
--- 662,666 ----
  
  #if ASSOC_KVPAIR_ASSIGNMENT
!   if (assoc_p (var) && kvpair_assignment_p (nlist))
      {
        iflags = flags & ~ASS_APPEND;
*** ../bash-5.1-patched/arrayfunc.h     2020-04-29 17:24:15.000000000 -0400
--- arrayfunc.h 2020-12-11 14:23:50.000000000 -0500
***************
*** 68,71 ****
--- 68,74 ----
  extern void quote_compound_array_list PARAMS((WORD_LIST *, int));
  
+ extern int kvpair_assignment_p PARAMS((WORD_LIST *));
+ extern char *expand_and_quote_kvpair_word PARAMS((char *));
+ 
  extern int unbind_array_element PARAMS((SHELL_VAR *, char *, int));
  extern int skipsubscript PARAMS((const char *, int, int));
*** ../bash-5.1-patched/subst.c 2020-11-16 10:33:15.000000000 -0500
--- subst.c     2020-12-11 15:11:10.000000000 -0500
***************
*** 11605,11608 ****
--- 11605,11609 ----
    WORD_LIST *l, *nl;
    char *t;
+   int kvpair;
    
    if (flags == 0)
***************
*** 11619,11622 ****
--- 11620,11627 ----
        /* Associative array */
        l = parse_string_to_word_list (value, 1, "array assign");
+ #if ASSOC_KVPAIR_ASSIGNMENT
+       kvpair = kvpair_assignment_p (l);
+ #endif
+ 
        /* For associative arrays, with their arbitrary subscripts, we have to
         expand and quote in one step so we don't have to search for the
***************
*** 11624,11627 ****
--- 11629,11638 ----
        for (nl = l; nl; nl = nl->next)
        {
+ #if ASSOC_KVPAIR_ASSIGNMENT
+         if (kvpair)
+           /* keys and values undergo the same set of expansions */
+           t = expand_and_quote_kvpair_word (nl->word->word);
+         else
+ #endif
          if ((nl->word->flags & W_ASSIGNMENT) == 0)
            t = sh_single_quote (nl->word->word ? nl->word->word : "");

*** ../bash-5.1/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h        2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 3
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 4
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]