summaryrefslogtreecommitdiff
path: root/debian/patches/bash43-022.diff
blob: f796c397313aee409a08afa93fc5068b5c4675fe (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
# DP: bash43-022 upstream patch

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

Bash-Release:	4.3
Patch-ID:	bash43-022

Bug-Reported-by:	scorp.dev.null@gmail.com
Bug-Reference-ID:	<E1WxXw8-0007iE-Bi@pcm14>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html

Bug-Description:

Using nested pipelines within loops with the `lastpipe' option set can result
in a segmentation fault.

Patch (apply with `patch -p0'):

Index: b/execute_cmd.c
===================================================================
--- a/execute_cmd.c
+++ b/execute_cmd.c
@@ -2409,7 +2409,16 @@ execute_pipeline (command, asynchronous,
 #endif
       lstdin = wait_for (lastpid);
 #if defined (JOB_CONTROL)
-      exec_result = job_exit_status (lastpipe_jid);
+      /* If wait_for removes the job from the jobs table, use result of last
+	 command as pipeline's exit status as usual.  The jobs list can get
+	 frozen and unfrozen at inconvenient times if there are multiple pipelines
+	 running simultaneously. */
+      if (INVALID_JOB (lastpipe_jid) == 0)
+	exec_result = job_exit_status (lastpipe_jid);
+      else if (pipefail_opt)
+	exec_result = exec_result | lstdin;	/* XXX */
+      /* otherwise we use exec_result */
+        
 #endif
       unfreeze_jobs_list ();
     }
Index: b/patchlevel.h
===================================================================
--- a/patchlevel.h
+++ b/patchlevel.h
@@ -25,6 +25,6 @@
    regexp `^#define[ 	]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */
 
-#define PATCHLEVEL 21
+#define PATCHLEVEL 22
 
 #endif /* _PATCHLEVEL_H_ */