bash-5.1-patch-5.patch 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. From cc978a670597afc3251baca3a7db553f36946c22 Mon Sep 17 00:00:00 2001
  2. From: Chet Ramey <chet.ramey@case.edu>
  3. Date: Tue, 4 May 2021 14:29:06 -0400
  4. Subject: [PATCH] Bash-5.1 patch 5: fix memory leaks in compound array
  5. assignments
  6. ---
  7. arrayfunc.c | 11 +++--------
  8. patchlevel.h | 2 +-
  9. subst.c | 2 ++
  10. 3 files changed, 6 insertions(+), 9 deletions(-)
  11. diff --git a/arrayfunc.c b/arrayfunc.c
  12. index 8231ba1e..9338dfc7 100644
  13. --- a/arrayfunc.c
  14. +++ b/arrayfunc.c
  15. @@ -564,12 +564,9 @@ assign_assoc_from_kvlist (var, nlist, h, flags)
  16. {
  17. WORD_LIST *list;
  18. char *akey, *aval, *k, *v;
  19. - int free_aval;
  20. for (list = nlist; list; list = list->next)
  21. {
  22. - free_aval = 0;
  23. -
  24. k = list->word->word;
  25. v = list->next ? list->next->word->word : 0;
  26. @@ -577,24 +574,22 @@ assign_assoc_from_kvlist (var, nlist, h, flags)
  27. list = list->next;
  28. akey = expand_assignment_string_to_string (k, 0);
  29. - aval = expand_assignment_string_to_string (v, 0);
  30. -
  31. if (akey == 0 || *akey == 0)
  32. {
  33. err_badarraysub (k);
  34. FREE (akey);
  35. continue;
  36. }
  37. +
  38. + aval = expand_assignment_string_to_string (v, 0);
  39. if (aval == 0)
  40. {
  41. aval = (char *)xmalloc (1);
  42. aval[0] = '\0'; /* like do_assignment_internal */
  43. - free_aval = 1;
  44. }
  45. bind_assoc_var_internal (var, h, akey, aval, flags);
  46. - if (free_aval)
  47. - free (aval);
  48. + free (aval);
  49. }
  50. }
  51. diff --git a/patchlevel.h b/patchlevel.h
  52. index e1429c24..c7f39aec 100644
  53. --- a/patchlevel.h
  54. +++ b/patchlevel.h
  55. @@ -25,6 +25,6 @@
  56. regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
  57. looks for to find the patch level (for the sccs version string). */
  58. -#define PATCHLEVEL 4
  59. +#define PATCHLEVEL 5
  60. #endif /* _PATCHLEVEL_H_ */
  61. diff --git a/subst.c b/subst.c
  62. index 6132316a..1d24188e 100644
  63. --- a/subst.c
  64. +++ b/subst.c
  65. @@ -11673,6 +11673,8 @@ expand_compound_assignment_word (tlist, flags)
  66. free (value);
  67. value = string_list (l);
  68. + dispose_words (l);
  69. +
  70. wlen = STRLEN (value);
  71. /* Now, let's rebuild the string */
  72. --
  73. 2.29.2