]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
Bash-4.4 patch 14
authorChet Ramey <chet.ramey@case.edu>
Mon, 29 Jan 2018 21:03:47 +0000 (16:03 -0500)
committerChet Ramey <chet.ramey@case.edu>
Mon, 29 Jan 2018 21:03:47 +0000 (16:03 -0500)
execute_cmd.c
patchlevel.h

index 2a3df6d620eb3ce6d645bbd717d456c5daf8bf29..76a80766983b00506bc22ad879cc3f5ddb799c18 100644 (file)
@@ -726,6 +726,8 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
     {
       ofifo = num_fifos ();
       ofifo_list = copy_fifo_list ((int *)&osize);
+      begin_unwind_frame ("internal_fifos");
+      add_unwind_protect (xfree, ofifo_list);
       saved_fifo = 1;
     }
   else
@@ -741,7 +743,10 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
       dispose_exec_redirects ();
 #if defined (PROCESS_SUBSTITUTION)
       if (saved_fifo)
-       free ((void *)ofifo_list);
+        {
+         free ((void *)ofifo_list);
+         discard_unwind_frame ("internal_fifos");
+        }
 #endif
       return (last_command_exit_value = EXECUTION_FAILURE);
     }
@@ -1060,6 +1065,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
       if (nfifo > ofifo)
        close_new_fifos ((char *)ofifo_list, osize);
       free ((void *)ofifo_list);
+      discard_unwind_frame ("internal_fifos");
     }
 #endif
 
@@ -4977,9 +4983,14 @@ execute_builtin_or_function (words, builtin, var, redirects,
   char *ofifo_list;
 #endif
 
-#if defined (PROCESS_SUBSTITUTION)  
+#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
 
   if (do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
@@ -5063,7 +5074,9 @@ execute_builtin_or_function (words, builtin, var, redirects,
   nfifo = num_fifos ();
   if (nfifo > ofifo)
     close_new_fifos (ofifo_list, osize);
-  free (ofifo_list);
+  if (ofifo_list)
+    free (ofifo_list);
+  discard_unwind_frame ("saved_fifos");
 #endif
 
   return (result);
index 779671cd9539de449a01a1c33ea7017b611261dc..09a3cc844c2a1020d695d3b0246277bbab37cb21 100644 (file)
@@ -25,6 +25,6 @@
    regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */
 
-#define PATCHLEVEL 13
+#define PATCHLEVEL 14
 
 #endif /* _PATCHLEVEL_H_ */