*** ../bash-20171205/execute_cmd.c 2017-12-08 07:38:28.000000000 -0500 --- execute_cmd.c 2017-12-08 09:54:45.000000000 -0500 *************** *** 750,753 **** --- 750,755 ---- ofifo = num_fifos (); ofifo_list = copy_fifo_list ((int *)&osize); + begin_unwind_frame ("internal_fifos"); + add_unwind_protect (xfree, ofifo_list); saved_fifo = 1; } *************** *** 1078,1081 **** --- 1080,1084 ---- close_new_fifos ((char *)ofifo_list, osize); free ((void *)ofifo_list); + discard_unwind_frame ("internal_fifos"); } #endif *************** *** 5098,5104 **** #endif ! #if defined (PROCESS_SUBSTITUTION) ofifo = num_fifos (); ofifo_list = copy_fifo_list (&osize); #endif --- 5103,5114 ---- #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 *************** *** 5179,5183 **** if (nfifo > ofifo) close_new_fifos (ofifo_list, osize); ! free (ofifo_list); #endif --- 5189,5195 ---- if (nfifo > ofifo) close_new_fifos (ofifo_list, osize); ! if (ofifo_list) ! free (ofifo_list); ! discard_unwind_frame ("saved_fifos"); #endif