diff options
author | Chet Ramey <chet.ramey@case.edu> | 2020-12-19 14:30:13 -0500 |
---|---|---|
committer | Chet Ramey <chet.ramey@case.edu> | 2020-12-19 14:30:13 -0500 |
commit | 76404c85d492c001f59f2644074333ffb7608532 (patch) | |
tree | 5ddcf0991c32d2b830de7396970fba3facdee1d9 /arrayfunc.c | |
parent | a042c731eecd6c6f5c488fa3187af28b18a6c905 (diff) | |
download | bash-76404c85d492c001f59f2644074333ffb7608532.tar.gz |
Bash-5.1 patch 4: fix key-value pair associative array assignment word expansions
Diffstat (limited to 'arrayfunc.c')
-rw-r--r-- | arrayfunc.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/arrayfunc.c b/arrayfunc.c index 2f8a3848..8231ba1e 100644 --- a/arrayfunc.c +++ b/arrayfunc.c @@ -597,6 +597,27 @@ assign_assoc_from_kvlist (var, nlist, h, flags) free (aval); } } + +/* 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 /* Callers ensure that VAR is not NULL. Associative array assignments have not @@ -640,7 +661,7 @@ assign_compound_array_list (var, nlist, flags) last_ind = (a && (flags & ASS_APPEND)) ? array_max_index (a) + 1 : 0; #if ASSOC_KVPAIR_ASSIGNMENT - if (assoc_p (var) && nlist && (nlist->word->flags & W_ASSIGNMENT) == 0 && nlist->word->word[0] != '[') /*]*/ + if (assoc_p (var) && kvpair_assignment_p (nlist)) { iflags = flags & ~ASS_APPEND; assign_assoc_from_kvlist (var, nlist, nhash, iflags); |