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