Tim Waugh b13041
			     BASH PATCH REPORT
Tim Waugh b13041
			     =================
Tim Waugh b13041
Tim Waugh b13041
Bash-Release: 3.2
Tim Waugh b13041
Patch-ID: bash32-015
Tim Waugh b13041
Tim Waugh b13041
Bug-Reported-by:
Tim Waugh b13041
Bug-Reference-ID:
Tim Waugh b13041
Bug-Reference-URL:
Tim Waugh b13041
Tim Waugh b13041
Bug-Description:
Tim Waugh b13041
Tim Waugh b13041
Under certain circumstances, when using FIFOs for process substitution,
Tim Waugh b13041
bash fails to unlink the FIFOs.  This leaves open file descriptors that
Tim Waugh b13041
can cause the shell to hang and litters the file system.
Tim Waugh b13041
Tim Waugh b13041
Patch:
Tim Waugh b13041
Tim Waugh b13041
*** ../bash-3.2-patched/execute_cmd.c	Fri Mar  2 16:20:50 2007
Tim Waugh b13041
--- execute_cmd.c	Wed Jan 31 23:12:06 2007
Tim Waugh b13041
***************
Tim Waugh b13041
*** 3051,3054 ****
Tim Waugh b13041
--- 3051,3059 ----
Tim Waugh b13041
      command_line = savestring (the_printed_command_except_trap);
Tim Waugh b13041
  
Tim Waugh b13041
+ #if defined (PROCESS_SUBSTITUTION)
Tim Waugh b13041
+   if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0)
Tim Waugh b13041
+     simple_command->flags &= ~CMD_NO_FORK;
Tim Waugh b13041
+ #endif
Tim Waugh b13041
+ 
Tim Waugh b13041
    execute_disk_command (words, simple_command->redirects, command_line,
Tim Waugh b13041
  			pipe_in, pipe_out, async, fds_to_close,
Tim Waugh b13041
*** ../bash-3.2-patched/subst.c	Fri Mar  2 16:20:50 2007
Tim Waugh b13041
--- subst.c	Tue Mar  6 11:40:55 2007
Tim Waugh b13041
***************
Tim Waugh b13041
*** 4129,4132 ****
Tim Waugh b13041
--- 4151,4160 ----
Tim Waugh b13041
  }
Tim Waugh b13041
  
Tim Waugh b13041
+ int
Tim Waugh b13041
+ fifos_pending ()
Tim Waugh b13041
+ {
Tim Waugh b13041
+   return nfifo;
Tim Waugh b13041
+ }
Tim Waugh b13041
+ 
Tim Waugh b13041
  static char *
Tim Waugh b13041
  make_named_pipe ()
Tim Waugh b13041
***************
Tim Waugh b13041
*** 4178,4181 ****
Tim Waugh b13041
--- 4206,4215 ----
Tim Waugh b13041
  }
Tim Waugh b13041
  
Tim Waugh b13041
+ int
Tim Waugh b13041
+ fifos_pending ()
Tim Waugh b13041
+ {
Tim Waugh b13041
+   return 0;	/* used for cleanup; not needed with /dev/fd */
Tim Waugh b13041
+ }
Tim Waugh b13041
+ 
Tim Waugh b13041
  void
Tim Waugh b13041
  unlink_fifo_list ()
Tim Waugh b13041
***************
Tim Waugh b13041
*** 4671,4674 ****
Tim Waugh b13041
--- 4719,4725 ----
Tim Waugh b13041
        last_command_exit_value = rc;
Tim Waugh b13041
        rc = run_exit_trap ();
Tim Waugh b13041
+ #if defined (PROCESS_SUBSTITUTION)
Tim Waugh b13041
+       unlink_fifo_list ();
Tim Waugh b13041
+ #endif
Tim Waugh b13041
        exit (rc);
Tim Waugh b13041
      }
Tim Waugh b13041
*** ../bash-3.2-patched/subst.h	Tue Sep 19 08:34:41 2006
Tim Waugh b13041
--- subst.h	Wed Jan 10 09:46:47 2007
Tim Waugh b13041
***************
Tim Waugh b13041
*** 223,226 ****
Tim Waugh b13041
--- 223,227 ----
Tim Waugh b13041
  extern char *pat_subst __P((char *, char *, char *, int));
Tim Waugh b13041
  
Tim Waugh b13041
+ extern int fifos_pending __P((void));
Tim Waugh b13041
  extern void unlink_fifo_list __P((void));
Tim Waugh b13041
Tim Waugh b13041
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
Tim Waugh b13041
--- patchlevel.h	Mon Oct 16 14:22:54 2006
Tim Waugh b13041
***************
Tim Waugh b13041
*** 26,30 ****
Tim Waugh b13041
     looks for to find the patch level (for the sccs version string). */
Tim Waugh b13041
  
Tim Waugh b13041
! #define PATCHLEVEL 14
Tim Waugh b13041
  
Tim Waugh b13041
  #endif /* _PATCHLEVEL_H_ */
Tim Waugh b13041
--- 26,30 ----
Tim Waugh b13041
     looks for to find the patch level (for the sccs version string). */
Tim Waugh b13041
  
Tim Waugh b13041
! #define PATCHLEVEL 15
Tim Waugh b13041
  
Tim Waugh b13041
  #endif /* _PATCHLEVEL_H_ */