summaryrefslogtreecommitdiff
path: root/arrayfunc.c
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2021-05-04 14:29:06 -0400
committerChet Ramey <chet.ramey@case.edu>2021-05-04 14:29:06 -0400
commitcc978a670597afc3251baca3a7db553f36946c22 (patch)
tree32fda48b93a0521ebd092091bc10a6b47927a83c /arrayfunc.c
parentf3a35a2d601a55f337f8ca02a541f8c033682247 (diff)
downloadbash-cc978a670597afc3251baca3a7db553f36946c22.tar.gz
Bash-5.1 patch 5: fix memory leaks in compound array assignments
Diffstat (limited to 'arrayfunc.c')
-rw-r--r--arrayfunc.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/arrayfunc.c b/arrayfunc.c
index 8231ba1e..9338dfc7 100644
--- a/arrayfunc.c
+++ b/arrayfunc.c
@@ -564,12 +564,9 @@ assign_assoc_from_kvlist (var, nlist, h, flags)
{
WORD_LIST *list;
char *akey, *aval, *k, *v;
- int free_aval;
for (list = nlist; list; list = list->next)
{
- free_aval = 0;
-
k = list->word->word;
v = list->next ? list->next->word->word : 0;
@@ -577,24 +574,22 @@ assign_assoc_from_kvlist (var, nlist, h, flags)
list = list->next;
akey = expand_assignment_string_to_string (k, 0);
- aval = expand_assignment_string_to_string (v, 0);
-
if (akey == 0 || *akey == 0)
{
err_badarraysub (k);
FREE (akey);
continue;
}
+
+ aval = expand_assignment_string_to_string (v, 0);
if (aval == 0)
{
aval = (char *)xmalloc (1);
aval[0] = '\0'; /* like do_assignment_internal */
- free_aval = 1;
}
bind_assoc_var_internal (var, h, akey, aval, flags);
- if (free_aval)
- free (aval);
+ free (aval);
}
}