			     BASH PATCH REPORT
			     =================

Bash-Release:	4.2
Patch-ID:	bash42-026

Bug-Reported-by:	Greg Wooledge <wooledg@eeg.ccf.org>
Bug-Reference-ID:	<20120425180443.GO22241@eeg.ccf.org>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00172.html

Bug-Description:

The `lastpipe' option does not behave correctly on machines where the
open file limit is less than 256.

Patch (apply with `patch -p0'):

*** ../bash-4.2-patched/execute_cmd.c	2011-11-21 12:04:47.000000000 -0500
--- ./execute_cmd.c	2012-04-26 11:09:30.000000000 -0400
***************
*** 2206,2210 ****
    if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
      {
!       lstdin = move_to_high_fd (0, 0, 255);
        if (lstdin > 0)
  	{
--- 2325,2329 ----
    if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
      {
!       lstdin = move_to_high_fd (0, 1, -1);
        if (lstdin > 0)
  	{
***************
*** 2252,2256 ****
--- 2371,2377 ----
      }
  
+ #if defined (JOB_CONTROL)
    discard_unwind_frame ("lastpipe-exec");
+ #endif
  
    return (exec_result);

*** ../bash-4.2-patched/patchlevel.h	Sat Jun 12 20:14:48 2010
--- ./patchlevel.h	Thu Feb 24 21:41:34 2011
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 25
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 26
  
  #endif /* _PATCHLEVEL_H_ */
