Re: [PATCH] Fix overflow in jobs

2017-12-08 Thread Chet Ramey
On 12/7/17 5:36 PM, Natanael Copa wrote:
> This fixes an issue with bash hanging if user process rlimit is too
> high.

Thanks for the report.

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/



Re: Bash leaks memory when doing function calls while reading from subshell as stdin

2017-12-08 Thread Chet Ramey
On 12/7/17 7:41 AM, Øyvind Hvidsten wrote:

> Bash Version: 4.4
> Patch Level: 12
> Release Status: release
> 
> Description:
> Somehow the included script causes a memory leak. Memory usage will
> grow huge over a very short timeframe.

Thanks for the report. It's the return in f2 that causes the problem.
This will be fixed in the next devel branch push. If you want to play
around with the fix, I've attached a patch.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/
*** ../bash-20171205/execute_cmd.c  2017-12-08 07:38:28.0 -0500
--- execute_cmd.c   2017-12-08 09:54:45.0 -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