summaryrefslogtreecommitdiffstats
path: root/source/a/bash/bash-4.4-patches/bash44-014
diff options
context:
space:
mode:
Diffstat (limited to 'source/a/bash/bash-4.4-patches/bash44-014')
-rw-r--r--source/a/bash/bash-4.4-patches/bash44-014104
1 files changed, 104 insertions, 0 deletions
diff --git a/source/a/bash/bash-4.4-patches/bash44-014 b/source/a/bash/bash-4.4-patches/bash44-014
new file mode 100644
index 000000000..ad3c78ac8
--- /dev/null
+++ b/source/a/bash/bash-4.4-patches/bash44-014
@@ -0,0 +1,104 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.4
+Patch-ID: bash44-014
+
+Bug-Reported-by: Oyvind Hvidsten <oyvind.hvidsten@dhampir.no>
+Bug-Reference-ID: <c01b7049-925c-9409-d978-e59bf42591f4@dhampir.no>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2017-12/msg00023.html
+
+Bug-Description:
+
+Under some circumstances, functions that return via the `return' builtin do
+not clean up memory they allocated to keep track of FIFOs.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-20171205/execute_cmd.c 2017-12-08 07:38:28.000000000 -0500
+--- execute_cmd.c 2018-01-26 15:23:38.000000000 -0500
+***************
+*** 727,730 ****
+--- 727,732 ----
+ ofifo = num_fifos ();
+ ofifo_list = copy_fifo_list ((int *)&osize);
++ begin_unwind_frame ("internal_fifos");
++ add_unwind_protect (xfree, ofifo_list);
+ saved_fifo = 1;
+ }
+***************
+*** 742,746 ****
+ #if defined (PROCESS_SUBSTITUTION)
+ if (saved_fifo)
+! free ((void *)ofifo_list);
+ #endif
+ return (last_command_exit_value = EXECUTION_FAILURE);
+--- 744,751 ----
+ #if defined (PROCESS_SUBSTITUTION)
+ if (saved_fifo)
+! {
+! free ((void *)ofifo_list);
+! discard_unwind_frame ("internal_fifos");
+! }
+ #endif
+ return (last_command_exit_value = EXECUTION_FAILURE);
+***************
+*** 1061,1064 ****
+--- 1066,1070 ----
+ close_new_fifos ((char *)ofifo_list, osize);
+ free ((void *)ofifo_list);
++ discard_unwind_frame ("internal_fifos");
+ }
+ #endif
+***************
+*** 4978,4984 ****
+ #endif
+
+! #if defined (PROCESS_SUBSTITUTION)
+ ofifo = num_fifos ();
+ ofifo_list = copy_fifo_list (&osize);
+ #endif
+
+--- 4984,4995 ----
+ #endif
+
+! #if defined (PROCESS_SUBSTITUTION)
+! begin_unwind_frame ("saved_fifos");
+! /* If we return, we longjmp and don't get a chance to restore the old
+! fifo list, so we add an unwind protect to free it */
+ ofifo = num_fifos ();
+ ofifo_list = copy_fifo_list (&osize);
++ if (ofifo_list)
++ add_unwind_protect (xfree, ofifo_list);
+ #endif
+
+***************
+*** 5064,5068 ****
+ if (nfifo > ofifo)
+ close_new_fifos (ofifo_list, osize);
+! free (ofifo_list);
+ #endif
+
+--- 5075,5081 ----
+ if (nfifo > ofifo)
+ close_new_fifos (ofifo_list, osize);
+! if (ofifo_list)
+! free (ofifo_list);
+! discard_unwind_frame ("saved_fifos");
+ #endif
+
+*** ../bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 13
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 14
+
+ #endif /* _PATCHLEVEL_H_ */