96 lines
2.3 KiB
Plaintext
96 lines
2.3 KiB
Plaintext
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_ */
|