summaryrefslogtreecommitdiff
path: root/debian/patches/bash32-015.dpatch
blob: 398456cde675cba8f99736a8c1e4af16759ae8f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#! /bin/sh -e

if [ $# -eq 3 -a "$2" = '-d' ]; then
    pdir="-d $3"
elif [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi
case "$1" in
    -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
    -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
    *)
	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
	exit 1
esac
exit 0

# DP: bash-3.2 upstream patch bash32-015

			     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
--- 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
--- 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
--- 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
--- 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_ */