Browse code

Fix bash CVE-2016-0634, match bash version with upstream patch level

Change-Id: I7640ffd512f312766ebd53938f34d6d4bdf0e6e6
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/4087
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>
Reviewed-by: Bo Gan <ganb@vmware.com>

Bo Gan authored on 2017/10/20 06:59:11
Showing 53 changed files
1 1
deleted file mode 100644
... ...
@@ -1,2631 +0,0 @@
1
-Submitted By:            Bruce Dubbs <bdubbs_at_linuxfromscratch_dot_org>
2
-Updated By:              Armin K. <krejzi at email dot com>
3
-Date:                    2014-10-11
4
-Initial Package Version: 4.3
5
-Upstream Status:         Already in upstream patch repo
6
-Origin:                  Upstream
7
-Description:             This patch contains upstream patch numbers 001 thru 030
8
-                         and fixes for CVE-2014-6271, CVE-2014-6277, CVE-2014-6278,
9
-                         CVE-2014-7169, and CVE-2014-7187
10
-
11
-+++ b/arrayfunc.c	2014-10-11 10:34:38.173610936 +0200
12
-@@ -179,6 +179,7 @@
13
-     array_insert (array_cell (entry), ind, newval);
14
-   FREE (newval);
15
- 
16
-+  VUNSETATTR (entry, att_invisible);	/* no longer invisible */
17
-   return (entry);
18
- }
19
- 
20
-@@ -597,6 +598,11 @@
21
-       if (assoc_p (var))
22
- 	{
23
- 	  val = expand_assignment_string_to_string (val, 0);
24
-+	  if (val == 0)
25
-+	    {
26
-+	      val = (char *)xmalloc (1);
27
-+	      val[0] = '\0';	/* like do_assignment_internal */
28
-+	    }
29
- 	  free_val = 1;
30
- 	}
31
- 
32
-+++ b/bashline.c	2014-10-11 10:34:38.173610936 +0200
33
-@@ -4167,9 +4167,16 @@
34
-   int qc;
35
- 
36
-   qc = rl_dispatching ? rl_completion_quote_character : 0;  
37
--  dfn = bash_dequote_filename ((char *)text, qc);
38
-+  /* If rl_completion_found_quote != 0, rl_completion_matches will call the
39
-+     filename dequoting function, causing the directory name to be dequoted
40
-+     twice. */
41
-+  if (rl_dispatching && rl_completion_found_quote == 0)
42
-+    dfn = bash_dequote_filename ((char *)text, qc);
43
-+  else
44
-+    dfn = (char *)text;
45
-   m1 = rl_completion_matches (dfn, rl_filename_completion_function);
46
--  free (dfn);
47
-+  if (dfn != text)
48
-+    free (dfn);
49
- 
50
-   if (m1 == 0 || m1[0] == 0)
51
-     return m1;
52
-+++ b/builtins/common.h	2014-10-11 10:34:38.174610956 +0200
53
-@@ -33,6 +33,8 @@
54
- #define SEVAL_RESETLINE	0x010
55
- #define SEVAL_PARSEONLY	0x020
56
- #define SEVAL_NOLONGJMP 0x040
57
-+#define SEVAL_FUNCDEF	0x080		/* only allow function definitions */
58
-+#define SEVAL_ONECMD	0x100		/* only allow a single command */
59
- 
60
- /* Flags for describe_command, shared between type.def and command.def */
61
- #define CDESC_ALL		0x001	/* type -a */
62
-+++ b/builtins/evalstring.c	2014-10-11 10:37:09.625510026 +0200
63
-@@ -308,6 +308,27 @@
64
- 	    {
65
- 	      struct fd_bitmap *bitmap;
66
- 
67
-+	      if (flags & SEVAL_FUNCDEF)
68
-+		{
69
-+		  char *x;
70
-+
71
-+		  /* If the command parses to something other than a straight
72
-+		     function definition, or if we have not consumed the entire
73
-+		     string, or if the parser has transformed the function
74
-+		     name (as parsing will if it begins or ends with shell
75
-+		     whitespace, for example), reject the attempt */
76
-+		  if (command->type != cm_function_def ||
77
-+		      ((x = parser_remaining_input ()) && *x) ||
78
-+		      (STREQ (from_file, command->value.Function_def->name->word) == 0))
79
-+		    {
80
-+		      internal_warning (_("%s: ignoring function definition attempt"), from_file);
81
-+		      should_jump_to_top_level = 0;
82
-+		      last_result = last_command_exit_value = EX_BADUSAGE;
83
-+		      reset_parser ();
84
-+		      break;
85
-+		    }
86
-+		}
87
-+
88
- 	      bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
89
- 	      begin_unwind_frame ("pe_dispose");
90
- 	      add_unwind_protect (dispose_fd_bitmap, bitmap);
91
-@@ -368,6 +389,12 @@
92
- 	      dispose_command (command);
93
- 	      dispose_fd_bitmap (bitmap);
94
- 	      discard_unwind_frame ("pe_dispose");
95
-+
96
-+	      if (flags & SEVAL_ONECMD)
97
-+		{
98
-+		  reset_parser ();
99
-+		  break;
100
-+		}
101
- 	    }
102
- 	}
103
-       else
104
-+++ b/builtins/read.def	2014-10-11 10:34:38.174610956 +0200
105
-@@ -442,7 +442,10 @@
106
-       add_unwind_protect (reset_alarm, (char *)NULL);
107
- #if defined (READLINE)
108
-       if (edit)
109
--	add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
110
-+	{
111
-+	  add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
112
-+	  add_unwind_protect (bashline_reset_event_hook, (char *)NULL);
113
-+	}
114
- #endif
115
-       falarm (tmsec, tmusec);
116
-     }
117
-@@ -1021,6 +1024,7 @@
118
- 
119
-   old_attempted_completion_function = rl_attempted_completion_function;
120
-   rl_attempted_completion_function = (rl_completion_func_t *)NULL;
121
-+  bashline_set_event_hook ();
122
-   if (itext)
123
-     {
124
-       old_startup_hook = rl_startup_hook;
125
-@@ -1032,6 +1036,7 @@
126
- 
127
-   rl_attempted_completion_function = old_attempted_completion_function;
128
-   old_attempted_completion_function = (rl_completion_func_t *)NULL;
129
-+  bashline_reset_event_hook ();
130
- 
131
-   if (ret == 0)
132
-     return ret;
133
-+++ b/copy_cmd.c	2014-10-11 10:34:38.174610956 +0200
134
-@@ -126,7 +126,7 @@
135
-     {
136
-     case r_reading_until:
137
-     case r_deblank_reading_until:
138
--      new_redirect->here_doc_eof = savestring (redirect->here_doc_eof);
139
-+      new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;
140
-       /*FALLTHROUGH*/
141
-     case r_reading_string:
142
-     case r_appending_to:
143
-+++ b/execute_cmd.c	2014-10-11 10:34:38.175610976 +0200
144
-@@ -2409,7 +2409,16 @@
145
- #endif
146
-       lstdin = wait_for (lastpid);
147
- #if defined (JOB_CONTROL)
148
--      exec_result = job_exit_status (lastpipe_jid);
149
-+      /* If wait_for removes the job from the jobs table, use result of last
150
-+	 command as pipeline's exit status as usual.  The jobs list can get
151
-+	 frozen and unfrozen at inconvenient times if there are multiple pipelines
152
-+	 running simultaneously. */
153
-+      if (INVALID_JOB (lastpipe_jid) == 0)
154
-+	exec_result = job_exit_status (lastpipe_jid);
155
-+      else if (pipefail_opt)
156
-+	exec_result = exec_result | lstdin;	/* XXX */
157
-+      /* otherwise we use exec_result */
158
-+        
159
- #endif
160
-       unfreeze_jobs_list ();
161
-     }
162
-+++ b/externs.h	2014-10-11 10:34:38.175610976 +0200
163
-@@ -324,6 +324,7 @@
164
- extern char *sh_backslash_quote __P((char *, const char *, int));
165
- extern char *sh_backslash_quote_for_double_quotes __P((char *));
166
- extern int sh_contains_shell_metas __P((char *));
167
-+extern int sh_contains_quotes __P((char *));
168
- 
169
- /* declarations for functions defined in lib/sh/spell.c */
170
- extern int spname __P((char *, char *));
171
-+++ b/jobs.c	2014-10-11 10:34:38.176610995 +0200
172
-@@ -3597,6 +3597,7 @@
173
-   unwind_protect_int (jobs_list_frozen);
174
-   unwind_protect_pointer (the_pipeline);
175
-   unwind_protect_pointer (subst_assign_varlist);
176
-+  unwind_protect_pointer (this_shell_builtin);
177
- 
178
-   /* We have to add the commands this way because they will be run
179
-      in reverse order of adding.  We don't want maybe_set_sigchld_trap ()
180
-@@ -4374,7 +4375,7 @@
181
- void
182
- end_job_control ()
183
- {
184
--  if (interactive_shell)		/* XXX - should it be interactive? */
185
-+  if (interactive_shell || job_control)		/* XXX - should it be just job_control? */
186
-     {
187
-       terminate_stopped_jobs ();
188
- 
189
-+++ b/lib/glob/glob.c	2014-10-11 10:34:38.176610995 +0200
190
-@@ -123,6 +123,8 @@
191
- extern char *glob_patscan __P((char *, char *, int));
192
- extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
193
- 
194
-+extern char *glob_dirscan __P((char *, int));
195
-+
196
- /* Compile `glob_loop.c' for single-byte characters. */
197
- #define CHAR	unsigned char
198
- #define INT	int
199
-@@ -179,42 +181,53 @@
200
-      char *pat, *dname;
201
-      int flags;
202
- {
203
--  char *pp, *pe, *t;
204
--  int n, r;
205
-+  char *pp, *pe, *t, *se;
206
-+  int n, r, negate;
207
- 
208
-+  negate = *pat == '!';
209
-   pp = pat + 2;
210
--  pe = pp + strlen (pp) - 1;	/*(*/
211
--  if (*pe != ')')
212
-+  se = pp + strlen (pp) - 1;		/* end of string */
213
-+  pe = glob_patscan (pp, se, 0);	/* end of extglob pattern (( */
214
-+  /* we should check for invalid extglob pattern here */
215
-+  if (pe == 0)
216
-     return 0;
217
--  if ((t = strchr (pp, '|')) == 0)	/* easy case first */
218
-+
219
-+  /* if pe != se we have more of the pattern at the end of the extglob
220
-+     pattern. Check the easy case first ( */
221
-+  if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
222
-     {
223
-       *pe = '\0';
224
-+#if defined (HANDLE_MULTIBYTE)
225
-+      r = mbskipname (pp, dname, flags);
226
-+#else
227
-       r = skipname (pp, dname, flags);	/*(*/
228
-+#endif
229
-       *pe = ')';
230
-       return r;
231
-     }
232
-+
233
-+  /* check every subpattern */
234
-   while (t = glob_patscan (pp, pe, '|'))
235
-     {
236
-       n = t[-1];
237
-       t[-1] = '\0';
238
-+#if defined (HANDLE_MULTIBYTE)
239
-+      r = mbskipname (pp, dname, flags);
240
-+#else
241
-       r = skipname (pp, dname, flags);
242
-+#endif
243
-       t[-1] = n;
244
-       if (r == 0)	/* if any pattern says not skip, we don't skip */
245
-         return r;
246
-       pp = t;
247
-     }	/*(*/
248
- 
249
--  if (pp == pe)		/* glob_patscan might find end of pattern */
250
-+  /* glob_patscan might find end of pattern */
251
-+  if (pp == se)
252
-     return r;
253
- 
254
--  *pe = '\0';
255
--#  if defined (HANDLE_MULTIBYTE)
256
--  r = mbskipname (pp, dname, flags);	/*(*/
257
--#  else
258
--  r = skipname (pp, dname, flags);	/*(*/
259
--#  endif
260
--  *pe = ')';
261
--  return r;
262
-+  /* but if it doesn't then we didn't match a leading dot */
263
-+  return 0;
264
- }
265
- #endif
266
- 
267
-@@ -277,20 +290,23 @@
268
-      int flags;
269
- {
270
- #if EXTENDED_GLOB
271
--  wchar_t *pp, *pe, *t, n;
272
--  int r;
273
-+  wchar_t *pp, *pe, *t, n, *se;
274
-+  int r, negate;
275
- 
276
-+  negate = *pat == L'!';
277
-   pp = pat + 2;
278
--  pe = pp + wcslen (pp) - 1;	/*(*/
279
--  if (*pe != L')')
280
--    return 0;
281
--  if ((t = wcschr (pp, L'|')) == 0)
282
-+  se = pp + wcslen (pp) - 1;	/*(*/
283
-+  pe = glob_patscan_wc (pp, se, 0);
284
-+
285
-+  if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
286
-     {
287
-       *pe = L'\0';
288
-       r = wchkname (pp, dname); /*(*/
289
-       *pe = L')';
290
-       return r;
291
-     }
292
-+
293
-+  /* check every subpattern */
294
-   while (t = glob_patscan_wc (pp, pe, '|'))
295
-     {
296
-       n = t[-1];
297
-@@ -305,10 +321,8 @@
298
-   if (pp == pe)		/* glob_patscan_wc might find end of pattern */
299
-     return r;
300
- 
301
--  *pe = L'\0';
302
--  r = wchkname (pp, dname);	/*(*/
303
--  *pe = L')';
304
--  return r;
305
-+  /* but if it doesn't then we didn't match a leading dot */
306
-+  return 0;
307
- #else
308
-   return (wchkname (pat, dname));
309
- #endif
310
-@@ -1006,7 +1020,7 @@
311
- {
312
-   char **result;
313
-   unsigned int result_size;
314
--  char *directory_name, *filename, *dname;
315
-+  char *directory_name, *filename, *dname, *fn;
316
-   unsigned int directory_len;
317
-   int free_dirname;			/* flag */
318
-   int dflags;
319
-@@ -1022,6 +1036,18 @@
320
- 
321
-   /* Find the filename.  */
322
-   filename = strrchr (pathname, '/');
323
-+#if defined (EXTENDED_GLOB)
324
-+  if (filename && extended_glob)
325
-+    {
326
-+      fn = glob_dirscan (pathname, '/');
327
-+#if DEBUG_MATCHING
328
-+      if (fn != filename)
329
-+	fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
330
-+#endif
331
-+      filename = fn;
332
-+    }
333
-+#endif
334
-+
335
-   if (filename == NULL)
336
-     {
337
-       filename = pathname;
338
-+++ b/lib/glob/gmisc.c	2014-10-11 10:34:38.176610995 +0200
339
-@@ -42,6 +42,8 @@
340
- #define WLPAREN         L'('
341
- #define WRPAREN         L')'
342
- 
343
-+extern char *glob_patscan __P((char *, char *, int));
344
-+
345
- /* Return 1 of the first character of WSTRING could match the first
346
-    character of pattern WPAT.  Wide character version. */
347
- int
348
-@@ -210,6 +212,7 @@
349
-     case '+':
350
-     case '!':
351
-     case '@':
352
-+    case '?':
353
-       return (pat[1] == LPAREN);
354
-     default:
355
-       return 0;
356
-@@ -374,3 +377,34 @@
357
- 
358
-   return matlen;
359
- }
360
-+
361
-+/* Skip characters in PAT and return the final occurrence of DIRSEP.  This
362
-+   is only called when extended_glob is set, so we have to skip over extglob
363
-+   patterns x(...) */
364
-+char *
365
-+glob_dirscan (pat, dirsep)
366
-+     char *pat;
367
-+     int dirsep;
368
-+{
369
-+  char *p, *d, *pe, *se;
370
-+
371
-+  d = pe = se = 0;
372
-+  for (p = pat; p && *p; p++)
373
-+    {
374
-+      if (extglob_pattern_p (p))
375
-+	{
376
-+	  if (se == 0)
377
-+	    se = p + strlen (p) - 1;
378
-+	  pe = glob_patscan (p + 2, se, 0);
379
-+	  if (pe == 0)
380
-+	    continue;
381
-+	  else if (*pe == 0)
382
-+	    break;
383
-+	  p = pe - 1;	/* will do increment above */
384
-+	  continue;
385
-+	}
386
-+      if (*p ==  dirsep)
387
-+	d = p;
388
-+    }
389
-+  return d;
390
-+}
391
-+++ b/lib/readline/display.c	2014-10-11 10:34:38.177611015 +0200
392
-@@ -1637,7 +1637,7 @@
393
-   /* If we are changing the number of invisible characters in a line, and
394
-      the spot of first difference is before the end of the invisible chars,
395
-      lendiff needs to be adjusted. */
396
--  if (current_line == 0 && !_rl_horizontal_scroll_mode &&
397
-+  if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
398
-       current_invis_chars != visible_wrap_offset)
399
-     {
400
-       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
401
-@@ -1825,8 +1825,13 @@
402
- 	      else
403
- 		_rl_last_c_pos += bytes_to_insert;
404
- 
405
-+	      /* XXX - we only want to do this if we are at the end of the line
406
-+		 so we move there with _rl_move_cursor_relative */
407
- 	      if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
408
--		goto clear_rest_of_line;
409
-+		{
410
-+		  _rl_move_cursor_relative (ne-new, new);
411
-+		  goto clear_rest_of_line;
412
-+		}
413
- 	    }
414
- 	}
415
-       /* Otherwise, print over the existing material. */
416
-@@ -2677,7 +2682,8 @@
417
- {
418
-   if (_rl_echoing_p)
419
-     {
420
--      _rl_move_vert (_rl_vis_botlin);
421
-+      if (_rl_vis_botlin > 0)	/* minor optimization plus bug fix */
422
-+	_rl_move_vert (_rl_vis_botlin);
423
-       _rl_vis_botlin = 0;
424
-       fflush (rl_outstream);
425
-       rl_restart_output (1, 0);
426
-+++ b/lib/readline/input.c	2014-10-11 10:34:38.177611015 +0200
427
-@@ -534,8 +534,16 @@
428
- 	return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
429
-       else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM)
430
- 	return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
431
-+      /* keyboard-generated signals of interest */
432
-       else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT)
433
-         RL_CHECK_SIGNALS ();
434
-+      /* non-keyboard-generated signals of interest */
435
-+      else if (_rl_caught_signal == SIGALRM
436
-+#if defined (SIGVTALRM)
437
-+		|| _rl_caught_signal == SIGVTALRM
438
-+#endif
439
-+	      )
440
-+        RL_CHECK_SIGNALS ();
441
- 
442
-       if (rl_signal_event_hook)
443
- 	(*rl_signal_event_hook) ();
444
-+++ b/lib/readline/misc.c	2014-10-11 10:34:38.177611015 +0200
445
-@@ -461,6 +461,7 @@
446
- 	    saved_undo_list = 0;
447
- 	  /* Set up rl_line_buffer and other variables from history entry */
448
- 	  rl_replace_from_history (entry, 0);	/* entry->line is now current */
449
-+	  entry->data = 0;			/* entry->data is now current undo list */
450
- 	  /* Undo all changes to this history entry */
451
- 	  while (rl_undo_list)
452
- 	    rl_do_undo ();
453
-@@ -468,7 +469,6 @@
454
- 	     the timestamp. */
455
- 	  FREE (entry->line);
456
- 	  entry->line = savestring (rl_line_buffer);
457
--	  entry->data = 0;
458
- 	}
459
-       entry = previous_history ();
460
-     }
461
-+++ b/lib/readline/readline.c	2014-10-11 10:34:38.177611015 +0200
462
-@@ -744,7 +744,8 @@
463
-     r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
464
- 
465
-   RL_CHECK_SIGNALS ();
466
--  if (r == 0)			/* success! */
467
-+  /* We only treat values < 0 specially to simulate recursion. */
468
-+  if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0))	/* success! or failure! */
469
-     {
470
-       _rl_keyseq_chain_dispose ();
471
-       RL_UNSETSTATE (RL_STATE_MULTIKEY);
472
-@@ -964,7 +965,7 @@
473
- #if defined (VI_MODE)
474
-   if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
475
-       key != ANYOTHERKEY &&
476
--      rl_key_sequence_length == 1 &&	/* XXX */
477
-+      _rl_dispatching_keymap == vi_movement_keymap &&
478
-       _rl_vi_textmod_command (key))
479
-     _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
480
- #endif
481
-+++ b/lib/sh/shquote.c	2014-10-11 10:34:38.177611015 +0200
482
-@@ -311,3 +311,17 @@
483
- 
484
-   return (0);
485
- }
486
-+
487
-+int
488
-+sh_contains_quotes (string)
489
-+     char *string;
490
-+{
491
-+  char *s;
492
-+
493
-+  for (s = string; s && *s; s++)
494
-+    {
495
-+      if (*s == '\'' || *s == '"' || *s == '\\')
496
-+	return 1;
497
-+    }
498
-+  return 0;
499
-+}
500
-+++ b/make_cmd.c	2014-10-11 10:34:38.178611034 +0200
501
-@@ -692,6 +692,7 @@
502
-   /* First do the common cases. */
503
-   temp->redirector = source;
504
-   temp->redirectee = dest_and_filename;
505
-+  temp->here_doc_eof = 0;
506
-   temp->instruction = instruction;
507
-   temp->flags = 0;
508
-   temp->rflags = flags;
509
-+++ b/parse.y	2014-10-11 10:37:09.626510045 +0200
510
-@@ -168,6 +168,9 @@
511
- 
512
- static int reserved_word_acceptable __P((int));
513
- static int yylex __P((void));
514
-+
515
-+static void push_heredoc __P((REDIRECT *));
516
-+static char *mk_alexpansion __P((char *));
517
- static int alias_expand_token __P((char *));
518
- static int time_command_acceptable __P((void));
519
- static int special_case_tokens __P((char *));
520
-@@ -265,7 +268,9 @@
521
- 
522
- /* Variables to manage the task of reading here documents, because we need to
523
-    defer the reading until after a complete command has been collected. */
524
--static REDIRECT *redir_stack[10];
525
-+#define HEREDOC_MAX 16
526
-+
527
-+static REDIRECT *redir_stack[HEREDOC_MAX];
528
- int need_here_doc;
529
- 
530
- /* Where shell input comes from.  History expansion is performed on each
531
-@@ -307,7 +312,7 @@
532
-    or `for WORD' begins.  This is a nested command maximum, since the array
533
-    index is decremented after a case, select, or for command is parsed. */
534
- #define MAX_CASE_NEST	128
535
--static int word_lineno[MAX_CASE_NEST];
536
-+static int word_lineno[MAX_CASE_NEST+1];
537
- static int word_top = -1;
538
- 
539
- /* If non-zero, it is the token that we want read_token to return
540
-@@ -520,42 +525,42 @@
541
- 			  source.dest = 0;
542
- 			  redir.filename = $2;
543
- 			  $$ = make_redirection (source, r_reading_until, redir, 0);
544
--			  redir_stack[need_here_doc++] = $$;
545
-+			  push_heredoc ($$);
546
- 			}
547
- 	|	NUMBER LESS_LESS WORD
548
- 			{
549
- 			  source.dest = $1;
550
- 			  redir.filename = $3;
551
- 			  $$ = make_redirection (source, r_reading_until, redir, 0);
552
--			  redir_stack[need_here_doc++] = $$;
553
-+			  push_heredoc ($$);
554
- 			}
555
- 	|	REDIR_WORD LESS_LESS WORD
556
- 			{
557
- 			  source.filename = $1;
558
- 			  redir.filename = $3;
559
- 			  $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
560
--			  redir_stack[need_here_doc++] = $$;
561
-+			  push_heredoc ($$);
562
- 			}
563
- 	|	LESS_LESS_MINUS WORD
564
- 			{
565
- 			  source.dest = 0;
566
- 			  redir.filename = $2;
567
- 			  $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
568
--			  redir_stack[need_here_doc++] = $$;
569
-+			  push_heredoc ($$);
570
- 			}
571
- 	|	NUMBER LESS_LESS_MINUS WORD
572
- 			{
573
- 			  source.dest = $1;
574
- 			  redir.filename = $3;
575
- 			  $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
576
--			  redir_stack[need_here_doc++] = $$;
577
-+			  push_heredoc ($$);
578
- 			}
579
- 	|	REDIR_WORD  LESS_LESS_MINUS WORD
580
- 			{
581
- 			  source.filename = $1;
582
- 			  redir.filename = $3;
583
- 			  $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
584
--			  redir_stack[need_here_doc++] = $$;
585
-+			  push_heredoc ($$);
586
- 			}
587
- 	|	LESS_LESS_LESS WORD
588
- 			{
589
-@@ -2424,7 +2429,7 @@
590
- 	 not already end in an EOF character.  */
591
-       if (shell_input_line_terminator != EOF)
592
- 	{
593
--	  if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
594
-+	  if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
595
- 	    shell_input_line = (char *)xrealloc (shell_input_line,
596
- 					1 + (shell_input_line_size += 2));
597
- 
598
-@@ -2533,6 +2538,16 @@
599
-     eol_ungetc_lookahead = c;
600
- }
601
- 
602
-+char *
603
-+parser_remaining_input ()
604
-+{
605
-+  if (shell_input_line == 0)
606
-+    return 0;
607
-+  if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
608
-+    return '\0';	/* XXX */
609
-+  return (shell_input_line + shell_input_line_index);
610
-+}
611
-+
612
- #ifdef INCLUDE_UNUSED
613
- /* Back the input pointer up by one, effectively `ungetting' a character. */
614
- static void
615
-@@ -2636,13 +2651,28 @@
616
-    which allow ESAC to be the next one read. */
617
- static int esacs_needed_count;
618
- 
619
-+static void
620
-+push_heredoc (r)
621
-+     REDIRECT *r;
622
-+{
623
-+  if (need_here_doc >= HEREDOC_MAX)
624
-+    {
625
-+      last_command_exit_value = EX_BADUSAGE;
626
-+      need_here_doc = 0;
627
-+      report_syntax_error (_("maximum here-document count exceeded"));
628
-+      reset_parser ();
629
-+      exit_shell (last_command_exit_value);
630
-+    }
631
-+  redir_stack[need_here_doc++] = r;
632
-+}
633
-+
634
- void
635
- gather_here_documents ()
636
- {
637
-   int r;
638
- 
639
-   r = 0;
640
--  while (need_here_doc)
641
-+  while (need_here_doc > 0)
642
-     {
643
-       parser_state |= PST_HEREDOC;
644
-       make_here_document (redir_stack[r++], line_number);
645
-@@ -2953,6 +2983,8 @@
646
-   FREE (word_desc_to_read);
647
-   word_desc_to_read = (WORD_DESC *)NULL;
648
- 
649
-+  eol_ungetc_lookahead = 0;
650
-+
651
-   current_token = '\n';		/* XXX */
652
-   last_read_token = '\n';
653
-   token_to_read = '\n';
654
-@@ -3398,7 +3430,7 @@
655
-          within a double-quoted ${...} construct "an even number of
656
-          unescaped double-quotes or single-quotes, if any, shall occur." */
657
-       /* This was changed in Austin Group Interp 221 */
658
--      if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
659
-+      if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
660
- 	continue;
661
- 
662
-       /* Could also check open == '`' if we want to parse grouping constructs
663
-@@ -4005,8 +4037,8 @@
664
-   reset_parser ();
665
-   /* reset_parser clears shell_input_line and associated variables */
666
-   restore_input_line_state (&ls);
667
--  if (interactive)
668
--    token_to_read = 0;
669
-+
670
-+  token_to_read = 0;
671
- 
672
-   /* Need to find how many characters parse_and_execute consumed, update
673
-      *indp, if flags != 0, copy the portion of the string parsed into RET
674
-@@ -6075,6 +6107,7 @@
675
- 
676
-   ps->expand_aliases = expand_aliases;
677
-   ps->echo_input_at_read = echo_input_at_read;
678
-+  ps->need_here_doc = need_here_doc;
679
- 
680
-   ps->token = token;
681
-   ps->token_buffer_size = token_buffer_size;
682
-@@ -6123,6 +6156,7 @@
683
- 
684
-   expand_aliases = ps->expand_aliases;
685
-   echo_input_at_read = ps->echo_input_at_read;
686
-+  need_here_doc = ps->need_here_doc;
687
- 
688
-   FREE (token);
689
-   token = ps->token;
690
-+++ b/patchlevel.h	2014-10-11 10:37:09.628510082 +0200
691
-@@ -25,6 +25,6 @@
692
-    regexp `^#define[ 	]*PATCHLEVEL', since that's what support/mkversion.sh
693
-    looks for to find the patch level (for the sccs version string). */
694
- 
695
--#define PATCHLEVEL 0
696
-+#define PATCHLEVEL 30
697
- 
698
- #endif /* _PATCHLEVEL_H_ */
699
-+++ b/pcomplete.c	2014-10-11 10:34:38.179611054 +0200
700
-@@ -183,6 +183,7 @@
701
- 
702
- COMPSPEC *pcomp_curcs;
703
- const char *pcomp_curcmd;
704
-+const char *pcomp_curtxt;
705
- 
706
- #ifdef DEBUG
707
- /* Debugging code */
708
-@@ -753,6 +754,32 @@
709
- 	     quoted strings. */
710
- 	  dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
711
- 	}
712
-+      /* Intended to solve a mismatched assumption by bash-completion.  If
713
-+	 the text to be completed is empty, but bash-completion turns it into
714
-+	 a quoted string ('') assuming that this code will dequote it before
715
-+	 calling readline, do the dequoting. */
716
-+      else if (iscompgen && iscompleting &&
717
-+	       pcomp_curtxt && *pcomp_curtxt == 0 &&
718
-+	       text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && 
719
-+	       rl_filename_dequoting_function)
720
-+	dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
721
-+      /* Another mismatched assumption by bash-completion.  If compgen is being
722
-+      	 run as part of bash-completion, and the argument to compgen is not
723
-+      	 the same as the word originally passed to the programmable completion
724
-+      	 code, dequote the argument if it has quote characters.  It's an
725
-+      	 attempt to detect when bash-completion is quoting its filename
726
-+      	 argument before calling compgen. */
727
-+      /* We could check whether gen_shell_function_matches is in the call
728
-+	 stack by checking whether the gen-shell-function-matches tag is in
729
-+	 the unwind-protect stack, but there's no function to do that yet.
730
-+	 We could simply check whether we're executing in a function by
731
-+	 checking variable_context, and may end up doing that. */
732
-+      else if (iscompgen && iscompleting && rl_filename_dequoting_function &&
733
-+	       pcomp_curtxt && text &&
734
-+	       STREQ (pcomp_curtxt, text) == 0 &&
735
-+	       variable_context &&
736
-+	       sh_contains_quotes (text))	/* guess */
737
-+	dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
738
-       else
739
- 	dfn = savestring (text);
740
-     }
741
-@@ -1522,7 +1549,7 @@
742
-      COMPSPEC **lastcs;
743
- {
744
-   COMPSPEC *cs, *oldcs;
745
--  const char *oldcmd;
746
-+  const char *oldcmd, *oldtxt;
747
-   STRINGLIST *ret;
748
- 
749
-   cs = progcomp_search (ocmd);
750
-@@ -1545,14 +1572,17 @@
751
- 
752
-   oldcs = pcomp_curcs;
753
-   oldcmd = pcomp_curcmd;
754
-+  oldtxt = pcomp_curtxt;
755
- 
756
-   pcomp_curcs = cs;
757
-   pcomp_curcmd = cmd;
758
-+  pcomp_curtxt = word;
759
- 
760
-   ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
761
- 
762
-   pcomp_curcs = oldcs;
763
-   pcomp_curcmd = oldcmd;
764
-+  pcomp_curtxt = oldtxt;
765
- 
766
-   /* We need to conditionally handle setting *retryp here */
767
-   if (retryp)
768
-+++ b/shell.h	2014-10-11 10:37:09.626510045 +0200
769
-@@ -168,7 +168,8 @@
770
-   /* flags state affecting the parser */
771
-   int expand_aliases;
772
-   int echo_input_at_read;
773
--  
774
-+  int need_here_doc;
775
-+
776
- } sh_parser_state_t;
777
- 
778
- typedef struct _sh_input_line_state_t {
779
-@@ -179,6 +180,8 @@
780
- } sh_input_line_state_t;
781
- 
782
- /* Let's try declaring these here. */
783
-+extern char *parser_remaining_input __P((void));
784
-+
785
- extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
786
- extern void restore_parser_state __P((sh_parser_state_t *));
787
- 
788
-+++ b/subst.c	2014-10-11 10:34:38.180611073 +0200
789
-@@ -1192,12 +1192,18 @@
790
-    Start extracting at (SINDEX) as if we had just seen "<(".
791
-    Make (SINDEX) get the position of the matching ")". */ /*))*/
792
- char *
793
--extract_process_subst (string, starter, sindex)
794
-+extract_process_subst (string, starter, sindex, xflags)
795
-      char *string;
796
-      char *starter;
797
-      int *sindex;
798
-+     int xflags;
799
- {
800
-+#if 0
801
-   return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
802
-+#else
803
-+  xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0);
804
-+  return (xparse_dolparen (string, string+*sindex, sindex, xflags));
805
-+#endif
806
- }
807
- #endif /* PROCESS_SUBSTITUTION */
808
- 
809
-@@ -1785,7 +1791,7 @@
810
- 	  si = i + 2;
811
- 	  if (string[si] == '\0')
812
- 	    CQ_RETURN(si);
813
--	  temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si);
814
-+	  temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0);
815
- 	  free (temp);		/* no SX_ALLOC here */
816
- 	  i = si;
817
- 	  if (string[i] == '\0')
818
-@@ -3248,8 +3254,10 @@
819
-   if (w->word == 0 || w->word[0] == '\0')
820
-     return ((char *)NULL);
821
- 
822
-+  expand_no_split_dollar_star = 1;
823
-   w->flags |= W_NOSPLIT2;
824
-   l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
825
-+  expand_no_split_dollar_star = 0;
826
-   if (l)
827
-     {
828
-       if (special == 0)			/* LHS */
829
-@@ -7366,7 +7374,13 @@
830
-     }
831
- 
832
-   if (want_indir)
833
--    tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
834
-+    {
835
-+      tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
836
-+      /* Turn off the W_ARRAYIND flag because there is no way for this function
837
-+	 to return the index we're supposed to be using. */
838
-+      if (tdesc && tdesc->flags)
839
-+	tdesc->flags &= ~W_ARRAYIND;
840
-+    }
841
-   else
842
-     tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
843
- 
844
-@@ -7847,6 +7861,10 @@
845
- 	 We also want to make sure that splitting is done no matter what --
846
- 	 according to POSIX.2, this expands to a list of the positional
847
- 	 parameters no matter what IFS is set to. */
848
-+      /* XXX - what to do when in a context where word splitting is not
849
-+	 performed? Even when IFS is not the default, posix seems to imply
850
-+	 that we behave like unquoted $* ?  Maybe we should use PF_NOSPLIT2
851
-+	 here. */
852
-       temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted);
853
- 
854
-       tflag |= W_DOLLARAT;
855
-@@ -8029,7 +8047,9 @@
856
- 
857
- 	  goto return0;
858
- 	}
859
--      else if (var = find_variable_last_nameref (temp1))
860
-+      else if (var && (invisible_p (var) || var_isset (var) == 0))
861
-+	temp = (char *)NULL;
862
-+      else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
863
- 	{
864
- 	  temp = nameref_cell (var);
865
- #if defined (ARRAY_VARS)
866
-@@ -8243,7 +8263,7 @@
867
- 	    else
868
- 	      t_index = sindex + 1; /* skip past both '<' and LPAREN */
869
- 
870
--	    temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
871
-+	    temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/
872
- 	    sindex = t_index;
873
- 
874
- 	    /* If the process substitution specification is `<()', we want to
875
-@@ -8816,6 +8836,7 @@
876
-   else
877
-     {
878
-       char *ifs_chars;
879
-+      char *tstring;
880
- 
881
-       ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
882
- 
883
-@@ -8830,11 +8851,36 @@
884
- 	 regardless of what else has happened to IFS since the expansion. */
885
-       if (split_on_spaces)
886
- 	list = list_string (istring, " ", 1);	/* XXX quoted == 1? */
887
-+      /* If we have $@ (has_dollar_at != 0) and we are in a context where we
888
-+	 don't want to split the result (W_NOSPLIT2), and we are not quoted,
889
-+	 we have already separated the arguments with the first character of
890
-+	 $IFS.  In this case, we want to return a list with a single word
891
-+	 with the separator possibly replaced with a space (it's what other
892
-+	 shells seem to do).
893
-+	 quoted_dollar_at is internal to this function and is set if we are
894
-+	 passed an argument that is unquoted (quoted == 0) but we encounter a
895
-+	 double-quoted $@ while expanding it. */
896
-+      else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2))
897
-+	{
898
-+	  /* Only split and rejoin if we have to */
899
-+	  if (*ifs_chars && *ifs_chars != ' ')
900
-+	    {
901
-+	      list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
902
-+	      tstring = string_list (list);
903
-+	    }
904
-+	  else
905
-+	    tstring = istring;
906
-+	  tword = make_bare_word (tstring);
907
-+	  if (tstring != istring)
908
-+	    free (tstring);
909
-+	  goto set_word_flags;
910
-+	}
911
-       else if (has_dollar_at && ifs_chars)
912
- 	list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
913
-       else
914
- 	{
915
- 	  tword = make_bare_word (istring);
916
-+set_word_flags:
917
- 	  if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
918
- 	    tword->flags |= W_QUOTED;
919
- 	  if (word->flags & W_ASSIGNMENT)
920
-+++ b/subst.h	2014-10-11 10:34:38.181611093 +0200
921
-@@ -82,7 +82,7 @@
922
- /* Extract the <( or >( construct in STRING, and return a new string.
923
-    Start extracting at (SINDEX) as if we had just seen "<(".
924
-    Make (SINDEX) get the position just after the matching ")". */
925
--extern char *extract_process_subst __P((char *, char *, int *));
926
-+extern char *extract_process_subst __P((char *, char *, int *, int));
927
- #endif /* PROCESS_SUBSTITUTION */
928
- 
929
- /* Extract the name of the variable to bind to from the assignment string. */
930
-+++ b/test.c	2014-10-11 10:34:38.181611093 +0200
931
-@@ -646,8 +646,8 @@
932
-       return (v && invisible_p (v) == 0 && var_isset (v) ? TRUE : FALSE);
933
- 
934
-     case 'R':
935
--      v = find_variable (arg);
936
--      return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE);
937
-+      v = find_variable_noref (arg);
938
-+      return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE);
939
-     }
940
- 
941
-   /* We can't actually get here, but this shuts up gcc. */
942
-@@ -723,6 +723,7 @@
943
-     case 'o': case 'p': case 'r': case 's': case 't':
944
-     case 'u': case 'v': case 'w': case 'x': case 'z':
945
-     case 'G': case 'L': case 'O': case 'S': case 'N':
946
-+    case 'R':
947
-       return (1);
948
-     }
949
- 
950
-+++ b/trap.c	2014-10-11 10:34:38.181611093 +0200
951
-@@ -920,7 +920,8 @@
952
-       subst_assign_varlist = 0;
953
- 
954
- #if defined (JOB_CONTROL)
955
--      save_pipeline (1);	/* XXX only provides one save level */
956
-+      if (sig != DEBUG_TRAP)	/* run_debug_trap does this */
957
-+	save_pipeline (1);	/* XXX only provides one save level */
958
- #endif
959
- 
960
-       /* If we're in a function, make sure return longjmps come here, too. */
961
-@@ -940,7 +941,8 @@
962
-       trap_exit_value = last_command_exit_value;
963
- 
964
- #if defined (JOB_CONTROL)
965
--      restore_pipeline (1);
966
-+      if (sig != DEBUG_TRAP)	/* run_debug_trap does this */
967
-+	restore_pipeline (1);
968
- #endif
969
- 
970
-       subst_assign_varlist = save_subst_varlist;
971
-+++ b/variables.c	2014-10-11 10:34:38.182611113 +0200
972
-@@ -83,6 +83,11 @@
973
- 
974
- #define ifsname(s)	((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
975
- 
976
-+#define BASHFUNC_PREFIX		"BASH_FUNC_"
977
-+#define BASHFUNC_PREFLEN	10	/* == strlen(BASHFUNC_PREFIX */
978
-+#define BASHFUNC_SUFFIX		"%%"
979
-+#define BASHFUNC_SUFFLEN	2	/* == strlen(BASHFUNC_SUFFIX) */
980
-+
981
- extern char **environ;
982
- 
983
- /* Variables used here and defined in other files. */
984
-@@ -279,7 +284,7 @@
985
- static void propagate_temp_var __P((PTR_T));
986
- static void dispose_temporary_env __P((sh_free_func_t *));     
987
- 
988
--static inline char *mk_env_string __P((const char *, const char *));
989
-+static inline char *mk_env_string __P((const char *, const char *, int));
990
- static char **make_env_array_from_var_list __P((SHELL_VAR **));
991
- static char **make_var_export_array __P((VAR_CONTEXT *));
992
- static char **make_func_export_array __P((void));
993
-@@ -349,24 +354,33 @@
994
- 
995
-       /* If exported function, define it now.  Don't import functions from
996
- 	 the environment in privileged mode. */
997
--      if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
998
-+      if (privmode == 0 && read_but_dont_execute == 0 && 
999
-+          STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
1000
-+          STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
1001
-+	  STREQN ("() {", string, 4))
1002
- 	{
1003
--	  string_length = strlen (string);
1004
--	  temp_string = (char *)xmalloc (3 + string_length + char_index);
1005
-+	  size_t namelen;
1006
-+	  char *tname;		/* desired imported function name */
1007
- 
1008
--	  strcpy (temp_string, name);
1009
--	  temp_string[char_index] = ' ';
1010
--	  strcpy (temp_string + char_index + 1, string);
1011
-+	  namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
1012
- 
1013
--	  if (posixly_correct == 0 || legal_identifier (name))
1014
--	    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
1015
-+	  tname = name + BASHFUNC_PREFLEN;	/* start of func name */
1016
-+	  tname[namelen] = '\0';		/* now tname == func name */
1017
-+
1018
-+	  string_length = strlen (string);
1019
-+	  temp_string = (char *)xmalloc (namelen + string_length + 2);
1020
- 
1021
--	  /* Ancient backwards compatibility.  Old versions of bash exported
1022
--	     functions like name()=() {...} */
1023
--	  if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
1024
--	    name[char_index - 2] = '\0';
1025
-+	  memcpy (temp_string, tname, namelen);
1026
-+	  temp_string[namelen] = ' ';
1027
-+	  memcpy (temp_string + namelen + 1, string, string_length + 1);
1028
-+
1029
-+	  /* Don't import function names that are invalid identifiers from the
1030
-+	     environment, though we still allow them to be defined as shell
1031
-+	     variables. */
1032
-+	  if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
1033
-+	    parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
1034
- 
1035
--	  if (temp_var = find_function (name))
1036
-+	  if (temp_var = find_function (tname))
1037
- 	    {
1038
- 	      VSETATTR (temp_var, (att_exported|att_imported));
1039
- 	      array_needs_making = 1;
1040
-@@ -379,12 +393,11 @@
1041
- 		  array_needs_making = 1;
1042
- 		}
1043
- 	      last_command_exit_value = 1;
1044
--	      report_error (_("error importing function definition for `%s'"), name);
1045
-+	      report_error (_("error importing function definition for `%s'"), tname);
1046
- 	    }
1047
- 
1048
--	  /* ( */
1049
--	  if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
1050
--	    name[char_index - 2] = '(';		/* ) */
1051
-+	  /* Restore original suffix */
1052
-+	  tname[namelen] = BASHFUNC_SUFFIX[0];
1053
- 	}
1054
- #if defined (ARRAY_VARS)
1055
- #  if ARRAY_EXPORT
1056
-@@ -2197,10 +2210,7 @@
1057
-   /* local foo; local foo;  is a no-op. */
1058
-   old_var = find_variable (name);
1059
-   if (old_var && local_p (old_var) && old_var->context == variable_context)
1060
--    {
1061
--      VUNSETATTR (old_var, att_invisible);	/* XXX */
1062
--      return (old_var);
1063
--    }
1064
-+    return (old_var);
1065
- 
1066
-   was_tmpvar = old_var && tempvar_p (old_var);
1067
-   /* If we're making a local variable in a shell function, the temporary env
1068
-@@ -2963,7 +2973,7 @@
1069
-   var->context = variable_context;	/* XXX */
1070
- 
1071
-   INVALIDATE_EXPORTSTR (var);
1072
--  var->exportstr = mk_env_string (name, value);
1073
-+  var->exportstr = mk_env_string (name, value, 0);
1074
- 
1075
-   array_needs_making = 1;
1076
- 
1077
-@@ -3861,21 +3871,42 @@
1078
- /* **************************************************************** */
1079
- 
1080
- static inline char *
1081
--mk_env_string (name, value)
1082
-+mk_env_string (name, value, isfunc)
1083
-      const char *name, *value;
1084
-+     int isfunc;
1085
- {
1086
--  int name_len, value_len;
1087
--  char	*p;
1088
-+  size_t name_len, value_len;
1089
-+  char	*p, *q;
1090
- 
1091
-   name_len = strlen (name);
1092
-   value_len = STRLEN (value);
1093
--  p = (char *)xmalloc (2 + name_len + value_len);
1094
--  strcpy (p, name);
1095
--  p[name_len] = '=';
1096
-+
1097
-+  /* If we are exporting a shell function, construct the encoded function
1098
-+     name. */
1099
-+  if (isfunc && value)
1100
-+    {
1101
-+      p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
1102
-+      q = p;
1103
-+      memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
1104
-+      q += BASHFUNC_PREFLEN;
1105
-+      memcpy (q, name, name_len);
1106
-+      q += name_len;
1107
-+      memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
1108
-+      q += BASHFUNC_SUFFLEN;
1109
-+    }
1110
-+  else
1111
-+    {
1112
-+      p = (char *)xmalloc (2 + name_len + value_len);
1113
-+      memcpy (p, name, name_len);
1114
-+      q = p + name_len;
1115
-+    }
1116
-+
1117
-+  q[0] = '=';
1118
-   if (value && *value)
1119
--    strcpy (p + name_len + 1, value);
1120
-+    memcpy (q + 1, value, value_len + 1);
1121
-   else
1122
--    p[name_len + 1] = '\0';
1123
-+    q[1] = '\0';
1124
-+
1125
-   return (p);
1126
- }
1127
- 
1128
-@@ -3961,7 +3992,7 @@
1129
- 	  /* Gee, I'd like to get away with not using savestring() if we're
1130
- 	     using the cached exportstr... */
1131
- 	  list[list_index] = USE_EXPORTSTR ? savestring (value)
1132
--					   : mk_env_string (var->name, value);
1133
-+					   : mk_env_string (var->name, value, function_p (var));
1134
- 
1135
- 	  if (USE_EXPORTSTR == 0)
1136
- 	    SAVE_EXPORTSTR (var, list[list_index]);
1137
-+++ b/y.tab.c	2014-10-11 10:37:09.628510082 +0200
1138
-@@ -168,7 +168,7 @@
1139
- 
1140
- 
1141
- /* Copy the first part of user declarations.  */
1142
--#line 21 "/usr/homes/chet/src/bash/src/parse.y"
1143
-+#line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1144
- 
1145
- #include "config.h"
1146
- 
1147
-@@ -319,6 +319,9 @@
1148
- 
1149
- static int reserved_word_acceptable __P((int));
1150
- static int yylex __P((void));
1151
-+
1152
-+static void push_heredoc __P((REDIRECT *));
1153
-+static char *mk_alexpansion __P((char *));
1154
- static int alias_expand_token __P((char *));
1155
- static int time_command_acceptable __P((void));
1156
- static int special_case_tokens __P((char *));
1157
-@@ -416,7 +419,9 @@
1158
- 
1159
- /* Variables to manage the task of reading here documents, because we need to
1160
-    defer the reading until after a complete command has been collected. */
1161
--static REDIRECT *redir_stack[10];
1162
-+#define HEREDOC_MAX 16
1163
-+
1164
-+static REDIRECT *redir_stack[HEREDOC_MAX];
1165
- int need_here_doc;
1166
- 
1167
- /* Where shell input comes from.  History expansion is performed on each
1168
-@@ -458,7 +463,7 @@
1169
-    or `for WORD' begins.  This is a nested command maximum, since the array
1170
-    index is decremented after a case, select, or for command is parsed. */
1171
- #define MAX_CASE_NEST	128
1172
--static int word_lineno[MAX_CASE_NEST];
1173
-+static int word_lineno[MAX_CASE_NEST+1];
1174
- static int word_top = -1;
1175
- 
1176
- /* If non-zero, it is the token that we want read_token to return
1177
-@@ -492,7 +497,7 @@
1178
- 
1179
- #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1180
- typedef union YYSTYPE
1181
--#line 324 "/usr/homes/chet/src/bash/src/parse.y"
1182
-+#line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1183
- {
1184
-   WORD_DESC *word;		/* the word that we read. */
1185
-   int number;			/* the number that we read. */
1186
-@@ -503,7 +508,7 @@
1187
-   PATTERN_LIST *pattern;
1188
- }
1189
- /* Line 193 of yacc.c.  */
1190
--#line 507 "y.tab.c"
1191
-+#line 512 "y.tab.c"
1192
- 	YYSTYPE;
1193
- # define yystype YYSTYPE /* obsolescent; will be withdrawn */
1194
- # define YYSTYPE_IS_DECLARED 1
1195
-@@ -516,7 +521,7 @@
1196
- 
1197
- 
1198
- /* Line 216 of yacc.c.  */
1199
--#line 520 "y.tab.c"
1200
-+#line 525 "y.tab.c"
1201
- 
1202
- #ifdef short
1203
- # undef short
1204
-@@ -886,23 +891,23 @@
1205
- /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
1206
- static const yytype_uint16 yyrline[] =
1207
- {
1208
--       0,   377,   377,   388,   397,   412,   422,   424,   428,   434,
1209
--     440,   446,   452,   458,   464,   470,   476,   482,   488,   494,
1210
--     500,   506,   512,   518,   525,   532,   539,   546,   553,   560,
1211
--     566,   572,   578,   584,   590,   596,   602,   608,   614,   620,
1212
--     626,   632,   638,   644,   650,   656,   662,   668,   674,   680,
1213
--     686,   692,   700,   702,   704,   708,   712,   723,   725,   729,
1214
--     731,   733,   749,   751,   755,   757,   759,   761,   763,   765,
1215
--     767,   769,   771,   773,   775,   779,   784,   789,   794,   799,
1216
--     804,   809,   814,   821,   826,   831,   836,   843,   848,   853,
1217
--     858,   863,   868,   875,   880,   885,   892,   895,   898,   902,
1218
--     904,   935,   942,   947,   964,   969,   986,   993,   995,   997,
1219
--    1002,  1006,  1010,  1014,  1016,  1018,  1022,  1023,  1027,  1029,
1220
--    1031,  1033,  1037,  1039,  1041,  1043,  1045,  1047,  1051,  1053,
1221
--    1062,  1070,  1071,  1077,  1078,  1085,  1089,  1091,  1093,  1100,
1222
--    1102,  1104,  1108,  1109,  1112,  1114,  1116,  1120,  1121,  1130,
1223
--    1143,  1159,  1174,  1176,  1178,  1185,  1188,  1192,  1194,  1200,
1224
--    1206,  1223,  1243,  1245,  1268,  1272,  1274,  1276
1225
-+       0,   382,   382,   393,   402,   417,   427,   429,   433,   439,
1226
-+     445,   451,   457,   463,   469,   475,   481,   487,   493,   499,
1227
-+     505,   511,   517,   523,   530,   537,   544,   551,   558,   565,
1228
-+     571,   577,   583,   589,   595,   601,   607,   613,   619,   625,
1229
-+     631,   637,   643,   649,   655,   661,   667,   673,   679,   685,
1230
-+     691,   697,   705,   707,   709,   713,   717,   728,   730,   734,
1231
-+     736,   738,   754,   756,   760,   762,   764,   766,   768,   770,
1232
-+     772,   774,   776,   778,   780,   784,   789,   794,   799,   804,
1233
-+     809,   814,   819,   826,   831,   836,   841,   848,   853,   858,
1234
-+     863,   868,   873,   880,   885,   890,   897,   900,   903,   907,
1235
-+     909,   940,   947,   952,   969,   974,   991,   998,  1000,  1002,
1236
-+    1007,  1011,  1015,  1019,  1021,  1023,  1027,  1028,  1032,  1034,
1237
-+    1036,  1038,  1042,  1044,  1046,  1048,  1050,  1052,  1056,  1058,
1238
-+    1067,  1075,  1076,  1082,  1083,  1090,  1094,  1096,  1098,  1105,
1239
-+    1107,  1109,  1113,  1114,  1117,  1119,  1121,  1125,  1126,  1135,
1240
-+    1148,  1164,  1179,  1181,  1183,  1190,  1193,  1197,  1199,  1205,
1241
-+    1211,  1228,  1248,  1250,  1273,  1277,  1279,  1281
1242
- };
1243
- #endif
1244
- 
1245
-@@ -2093,7 +2098,7 @@
1246
-   switch (yyn)
1247
-     {
1248
-         case 2:
1249
--#line 378 "/usr/homes/chet/src/bash/src/parse.y"
1250
-+#line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1251
-     {
1252
- 			  /* Case of regular command.  Discard the error
1253
- 			     safety net,and return the command just parsed. */
1254
-@@ -2107,7 +2112,7 @@
1255
-     break;
1256
- 
1257
-   case 3:
1258
--#line 389 "/usr/homes/chet/src/bash/src/parse.y"
1259
-+#line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1260
-     {
1261
- 			  /* Case of regular command, but not a very
1262
- 			     interesting one.  Return a NULL command. */
1263
-@@ -2119,7 +2124,7 @@
1264
-     break;
1265
- 
1266
-   case 4:
1267
--#line 398 "/usr/homes/chet/src/bash/src/parse.y"
1268
-+#line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1269
-     {
1270
- 			  /* Error during parsing.  Return NULL command. */
1271
- 			  global_command = (COMMAND *)NULL;
1272
-@@ -2137,7 +2142,7 @@
1273
-     break;
1274
- 
1275
-   case 5:
1276
--#line 413 "/usr/homes/chet/src/bash/src/parse.y"
1277
-+#line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1278
-     {
1279
- 			  /* Case of EOF seen by itself.  Do ignoreeof or
1280
- 			     not. */
1281
-@@ -2148,17 +2153,17 @@
1282
-     break;
1283
- 
1284
-   case 6:
1285
--#line 423 "/usr/homes/chet/src/bash/src/parse.y"
1286
-+#line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1287
-     { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
1288
-     break;
1289
- 
1290
-   case 7:
1291
--#line 425 "/usr/homes/chet/src/bash/src/parse.y"
1292
-+#line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1293
-     { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
1294
-     break;
1295
- 
1296
-   case 8:
1297
--#line 429 "/usr/homes/chet/src/bash/src/parse.y"
1298
-+#line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1299
-     {
1300
- 			  source.dest = 1;
1301
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1302
-@@ -2167,7 +2172,7 @@
1303
-     break;
1304
- 
1305
-   case 9:
1306
--#line 435 "/usr/homes/chet/src/bash/src/parse.y"
1307
-+#line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1308
-     {
1309
- 			  source.dest = 0;
1310
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1311
-@@ -2176,7 +2181,7 @@
1312
-     break;
1313
- 
1314
-   case 10:
1315
--#line 441 "/usr/homes/chet/src/bash/src/parse.y"
1316
-+#line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1317
-     {
1318
- 			  source.dest = (yyvsp[(1) - (3)].number);
1319
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1320
-@@ -2185,7 +2190,7 @@
1321
-     break;
1322
- 
1323
-   case 11:
1324
--#line 447 "/usr/homes/chet/src/bash/src/parse.y"
1325
-+#line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1326
-     {
1327
- 			  source.dest = (yyvsp[(1) - (3)].number);
1328
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1329
-@@ -2194,7 +2199,7 @@
1330
-     break;
1331
- 
1332
-   case 12:
1333
--#line 453 "/usr/homes/chet/src/bash/src/parse.y"
1334
-+#line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1335
-     {
1336
- 			  source.filename = (yyvsp[(1) - (3)].word);
1337
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1338
-@@ -2203,7 +2208,7 @@
1339
-     break;
1340
- 
1341
-   case 13:
1342
--#line 459 "/usr/homes/chet/src/bash/src/parse.y"
1343
-+#line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1344
-     {
1345
- 			  source.filename = (yyvsp[(1) - (3)].word);
1346
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1347
-@@ -2212,7 +2217,7 @@
1348
-     break;
1349
- 
1350
-   case 14:
1351
--#line 465 "/usr/homes/chet/src/bash/src/parse.y"
1352
-+#line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1353
-     {
1354
- 			  source.dest = 1;
1355
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1356
-@@ -2221,7 +2226,7 @@
1357
-     break;
1358
- 
1359
-   case 15:
1360
--#line 471 "/usr/homes/chet/src/bash/src/parse.y"
1361
-+#line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1362
-     {
1363
- 			  source.dest = (yyvsp[(1) - (3)].number);
1364
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1365
-@@ -2230,7 +2235,7 @@
1366
-     break;
1367
- 
1368
-   case 16:
1369
--#line 477 "/usr/homes/chet/src/bash/src/parse.y"
1370
-+#line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1371
-     {
1372
- 			  source.filename = (yyvsp[(1) - (3)].word);
1373
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1374
-@@ -2239,7 +2244,7 @@
1375
-     break;
1376
- 
1377
-   case 17:
1378
--#line 483 "/usr/homes/chet/src/bash/src/parse.y"
1379
-+#line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1380
-     {
1381
- 			  source.dest = 1;
1382
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1383
-@@ -2248,7 +2253,7 @@
1384
-     break;
1385
- 
1386
-   case 18:
1387
--#line 489 "/usr/homes/chet/src/bash/src/parse.y"
1388
-+#line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1389
-     {
1390
- 			  source.dest = (yyvsp[(1) - (3)].number);
1391
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1392
-@@ -2257,7 +2262,7 @@
1393
-     break;
1394
- 
1395
-   case 19:
1396
--#line 495 "/usr/homes/chet/src/bash/src/parse.y"
1397
-+#line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1398
-     {
1399
- 			  source.filename = (yyvsp[(1) - (3)].word);
1400
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1401
-@@ -2266,7 +2271,7 @@
1402
-     break;
1403
- 
1404
-   case 20:
1405
--#line 501 "/usr/homes/chet/src/bash/src/parse.y"
1406
-+#line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1407
-     {
1408
- 			  source.dest = 0;
1409
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1410
-@@ -2275,7 +2280,7 @@
1411
-     break;
1412
- 
1413
-   case 21:
1414
--#line 507 "/usr/homes/chet/src/bash/src/parse.y"
1415
-+#line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1416
-     {
1417
- 			  source.dest = (yyvsp[(1) - (3)].number);
1418
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1419
-@@ -2284,7 +2289,7 @@
1420
-     break;
1421
- 
1422
-   case 22:
1423
--#line 513 "/usr/homes/chet/src/bash/src/parse.y"
1424
-+#line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1425
-     {
1426
- 			  source.filename = (yyvsp[(1) - (3)].word);
1427
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1428
-@@ -2293,67 +2298,67 @@
1429
-     break;
1430
- 
1431
-   case 23:
1432
--#line 519 "/usr/homes/chet/src/bash/src/parse.y"
1433
-+#line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1434
-     {
1435
- 			  source.dest = 0;
1436
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1437
- 			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
1438
--			  redir_stack[need_here_doc++] = (yyval.redirect);
1439
-+			  push_heredoc ((yyval.redirect));
1440
- 			}
1441
-     break;
1442
- 
1443
-   case 24:
1444
--#line 526 "/usr/homes/chet/src/bash/src/parse.y"
1445
-+#line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1446
-     {
1447
- 			  source.dest = (yyvsp[(1) - (3)].number);
1448
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1449
- 			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
1450
--			  redir_stack[need_here_doc++] = (yyval.redirect);
1451
-+			  push_heredoc ((yyval.redirect));
1452
- 			}
1453
-     break;
1454
- 
1455
-   case 25:
1456
--#line 533 "/usr/homes/chet/src/bash/src/parse.y"
1457
-+#line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1458
-     {
1459
- 			  source.filename = (yyvsp[(1) - (3)].word);
1460
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1461
- 			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
1462
--			  redir_stack[need_here_doc++] = (yyval.redirect);
1463
-+			  push_heredoc ((yyval.redirect));
1464
- 			}
1465
-     break;
1466
- 
1467
-   case 26:
1468
--#line 540 "/usr/homes/chet/src/bash/src/parse.y"
1469
-+#line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1470
-     {
1471
- 			  source.dest = 0;
1472
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1473
- 			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
1474
--			  redir_stack[need_here_doc++] = (yyval.redirect);
1475
-+			  push_heredoc ((yyval.redirect));
1476
- 			}
1477
-     break;
1478
- 
1479
-   case 27:
1480
--#line 547 "/usr/homes/chet/src/bash/src/parse.y"
1481
-+#line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1482
-     {
1483
- 			  source.dest = (yyvsp[(1) - (3)].number);
1484
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1485
- 			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
1486
--			  redir_stack[need_here_doc++] = (yyval.redirect);
1487
-+			  push_heredoc ((yyval.redirect));
1488
- 			}
1489
-     break;
1490
- 
1491
-   case 28:
1492
--#line 554 "/usr/homes/chet/src/bash/src/parse.y"
1493
-+#line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1494
-     {
1495
- 			  source.filename = (yyvsp[(1) - (3)].word);
1496
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1497
- 			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
1498
--			  redir_stack[need_here_doc++] = (yyval.redirect);
1499
-+			  push_heredoc ((yyval.redirect));
1500
- 			}
1501
-     break;
1502
- 
1503
-   case 29:
1504
--#line 561 "/usr/homes/chet/src/bash/src/parse.y"
1505
-+#line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1506
-     {
1507
- 			  source.dest = 0;
1508
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1509
-@@ -2362,7 +2367,7 @@
1510
-     break;
1511
- 
1512
-   case 30:
1513
--#line 567 "/usr/homes/chet/src/bash/src/parse.y"
1514
-+#line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1515
-     {
1516
- 			  source.dest = (yyvsp[(1) - (3)].number);
1517
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1518
-@@ -2371,7 +2376,7 @@
1519
-     break;
1520
- 
1521
-   case 31:
1522
--#line 573 "/usr/homes/chet/src/bash/src/parse.y"
1523
-+#line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1524
-     {
1525
- 			  source.filename = (yyvsp[(1) - (3)].word);
1526
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1527
-@@ -2380,7 +2385,7 @@
1528
-     break;
1529
- 
1530
-   case 32:
1531
--#line 579 "/usr/homes/chet/src/bash/src/parse.y"
1532
-+#line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1533
-     {
1534
- 			  source.dest = 0;
1535
- 			  redir.dest = (yyvsp[(2) - (2)].number);
1536
-@@ -2389,7 +2394,7 @@
1537
-     break;
1538
- 
1539
-   case 33:
1540
--#line 585 "/usr/homes/chet/src/bash/src/parse.y"
1541
-+#line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1542
-     {
1543
- 			  source.dest = (yyvsp[(1) - (3)].number);
1544
- 			  redir.dest = (yyvsp[(3) - (3)].number);
1545
-@@ -2398,7 +2403,7 @@
1546
-     break;
1547
- 
1548
-   case 34:
1549
--#line 591 "/usr/homes/chet/src/bash/src/parse.y"
1550
-+#line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1551
-     {
1552
- 			  source.filename = (yyvsp[(1) - (3)].word);
1553
- 			  redir.dest = (yyvsp[(3) - (3)].number);
1554
-@@ -2407,7 +2412,7 @@
1555
-     break;
1556
- 
1557
-   case 35:
1558
--#line 597 "/usr/homes/chet/src/bash/src/parse.y"
1559
-+#line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1560
-     {
1561
- 			  source.dest = 1;
1562
- 			  redir.dest = (yyvsp[(2) - (2)].number);
1563
-@@ -2416,7 +2421,7 @@
1564
-     break;
1565
- 
1566
-   case 36:
1567
--#line 603 "/usr/homes/chet/src/bash/src/parse.y"
1568
-+#line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1569
-     {
1570
- 			  source.dest = (yyvsp[(1) - (3)].number);
1571
- 			  redir.dest = (yyvsp[(3) - (3)].number);
1572
-@@ -2425,7 +2430,7 @@
1573
-     break;
1574
- 
1575
-   case 37:
1576
--#line 609 "/usr/homes/chet/src/bash/src/parse.y"
1577
-+#line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1578
-     {
1579
- 			  source.filename = (yyvsp[(1) - (3)].word);
1580
- 			  redir.dest = (yyvsp[(3) - (3)].number);
1581
-@@ -2434,7 +2439,7 @@
1582
-     break;
1583
- 
1584
-   case 38:
1585
--#line 615 "/usr/homes/chet/src/bash/src/parse.y"
1586
-+#line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1587
-     {
1588
- 			  source.dest = 0;
1589
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1590
-@@ -2443,7 +2448,7 @@
1591
-     break;
1592
- 
1593
-   case 39:
1594
--#line 621 "/usr/homes/chet/src/bash/src/parse.y"
1595
-+#line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1596
-     {
1597
- 			  source.dest = (yyvsp[(1) - (3)].number);
1598
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1599
-@@ -2452,7 +2457,7 @@
1600
-     break;
1601
- 
1602
-   case 40:
1603
--#line 627 "/usr/homes/chet/src/bash/src/parse.y"
1604
-+#line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1605
-     {
1606
- 			  source.filename = (yyvsp[(1) - (3)].word);
1607
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1608
-@@ -2461,7 +2466,7 @@
1609
-     break;
1610
- 
1611
-   case 41:
1612
--#line 633 "/usr/homes/chet/src/bash/src/parse.y"
1613
-+#line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1614
-     {
1615
- 			  source.dest = 1;
1616
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1617
-@@ -2470,7 +2475,7 @@
1618
-     break;
1619
- 
1620
-   case 42:
1621
--#line 639 "/usr/homes/chet/src/bash/src/parse.y"
1622
-+#line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1623
-     {
1624
- 			  source.dest = (yyvsp[(1) - (3)].number);
1625
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1626
-@@ -2479,7 +2484,7 @@
1627
-     break;
1628
- 
1629
-   case 43:
1630
--#line 645 "/usr/homes/chet/src/bash/src/parse.y"
1631
-+#line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1632
-     {
1633
- 			  source.filename = (yyvsp[(1) - (3)].word);
1634
- 			  redir.filename = (yyvsp[(3) - (3)].word);
1635
-@@ -2488,7 +2493,7 @@
1636
-     break;
1637
- 
1638
-   case 44:
1639
--#line 651 "/usr/homes/chet/src/bash/src/parse.y"
1640
-+#line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1641
-     {
1642
- 			  source.dest = 1;
1643
- 			  redir.dest = 0;
1644
-@@ -2497,7 +2502,7 @@
1645
-     break;
1646
- 
1647
-   case 45:
1648
--#line 657 "/usr/homes/chet/src/bash/src/parse.y"
1649
-+#line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1650
-     {
1651
- 			  source.dest = (yyvsp[(1) - (3)].number);
1652
- 			  redir.dest = 0;
1653
-@@ -2506,7 +2511,7 @@
1654
-     break;
1655
- 
1656
-   case 46:
1657
--#line 663 "/usr/homes/chet/src/bash/src/parse.y"
1658
-+#line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1659
-     {
1660
- 			  source.filename = (yyvsp[(1) - (3)].word);
1661
- 			  redir.dest = 0;
1662
-@@ -2515,7 +2520,7 @@
1663
-     break;
1664
- 
1665
-   case 47:
1666
--#line 669 "/usr/homes/chet/src/bash/src/parse.y"
1667
-+#line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1668
-     {
1669
- 			  source.dest = 0;
1670
- 			  redir.dest = 0;
1671
-@@ -2524,7 +2529,7 @@
1672
-     break;
1673
- 
1674
-   case 48:
1675
--#line 675 "/usr/homes/chet/src/bash/src/parse.y"
1676
-+#line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1677
-     {
1678
- 			  source.dest = (yyvsp[(1) - (3)].number);
1679
- 			  redir.dest = 0;
1680
-@@ -2533,7 +2538,7 @@
1681
-     break;
1682
- 
1683
-   case 49:
1684
--#line 681 "/usr/homes/chet/src/bash/src/parse.y"
1685
-+#line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1686
-     {
1687
- 			  source.filename = (yyvsp[(1) - (3)].word);
1688
- 			  redir.dest = 0;
1689
-@@ -2542,7 +2547,7 @@
1690
-     break;
1691
- 
1692
-   case 50:
1693
--#line 687 "/usr/homes/chet/src/bash/src/parse.y"
1694
-+#line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1695
-     {
1696
- 			  source.dest = 1;
1697
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1698
-@@ -2551,7 +2556,7 @@
1699
-     break;
1700
- 
1701
-   case 51:
1702
--#line 693 "/usr/homes/chet/src/bash/src/parse.y"
1703
-+#line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1704
-     {
1705
- 			  source.dest = 1;
1706
- 			  redir.filename = (yyvsp[(2) - (2)].word);
1707
-@@ -2560,29 +2565,29 @@
1708
-     break;
1709
- 
1710
-   case 52:
1711
--#line 701 "/usr/homes/chet/src/bash/src/parse.y"
1712
-+#line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1713
-     { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
1714
-     break;
1715
- 
1716
-   case 53:
1717
--#line 703 "/usr/homes/chet/src/bash/src/parse.y"
1718
-+#line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1719
-     { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
1720
-     break;
1721
- 
1722
-   case 54:
1723
--#line 705 "/usr/homes/chet/src/bash/src/parse.y"
1724
-+#line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1725
-     { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
1726
-     break;
1727
- 
1728
-   case 55:
1729
--#line 709 "/usr/homes/chet/src/bash/src/parse.y"
1730
-+#line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1731
-     {
1732
- 			  (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
1733
- 			}
1734
-     break;
1735
- 
1736
-   case 56:
1737
--#line 713 "/usr/homes/chet/src/bash/src/parse.y"
1738
-+#line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1739
-     {
1740
- 			  register REDIRECT *t;
1741
- 
1742
-@@ -2594,27 +2599,27 @@
1743
-     break;
1744
- 
1745
-   case 57:
1746
--#line 724 "/usr/homes/chet/src/bash/src/parse.y"
1747
-+#line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1748
-     { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
1749
-     break;
1750
- 
1751
-   case 58:
1752
--#line 726 "/usr/homes/chet/src/bash/src/parse.y"
1753
-+#line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1754
-     { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
1755
-     break;
1756
- 
1757
-   case 59:
1758
--#line 730 "/usr/homes/chet/src/bash/src/parse.y"
1759
-+#line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1760
-     { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
1761
-     break;
1762
- 
1763
-   case 60:
1764
--#line 732 "/usr/homes/chet/src/bash/src/parse.y"
1765
-+#line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1766
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1767
-     break;
1768
- 
1769
-   case 61:
1770
--#line 734 "/usr/homes/chet/src/bash/src/parse.y"
1771
-+#line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1772
-     {
1773
- 			  COMMAND *tc;
1774
- 
1775
-@@ -2633,72 +2638,72 @@
1776
-     break;
1777
- 
1778
-   case 62:
1779
--#line 750 "/usr/homes/chet/src/bash/src/parse.y"
1780
-+#line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1781
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1782
-     break;
1783
- 
1784
-   case 63:
1785
--#line 752 "/usr/homes/chet/src/bash/src/parse.y"
1786
-+#line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1787
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1788
-     break;
1789
- 
1790
-   case 64:
1791
--#line 756 "/usr/homes/chet/src/bash/src/parse.y"
1792
-+#line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1793
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1794
-     break;
1795
- 
1796
-   case 65:
1797
--#line 758 "/usr/homes/chet/src/bash/src/parse.y"
1798
-+#line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1799
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1800
-     break;
1801
- 
1802
-   case 66:
1803
--#line 760 "/usr/homes/chet/src/bash/src/parse.y"
1804
-+#line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1805
-     { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
1806
-     break;
1807
- 
1808
-   case 67:
1809
--#line 762 "/usr/homes/chet/src/bash/src/parse.y"
1810
-+#line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1811
-     { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
1812
-     break;
1813
- 
1814
-   case 68:
1815
--#line 764 "/usr/homes/chet/src/bash/src/parse.y"
1816
-+#line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1817
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1818
-     break;
1819
- 
1820
-   case 69:
1821
--#line 766 "/usr/homes/chet/src/bash/src/parse.y"
1822
-+#line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1823
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1824
-     break;
1825
- 
1826
-   case 70:
1827
--#line 768 "/usr/homes/chet/src/bash/src/parse.y"
1828
-+#line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1829
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1830
-     break;
1831
- 
1832
-   case 71:
1833
--#line 770 "/usr/homes/chet/src/bash/src/parse.y"
1834
-+#line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1835
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1836
-     break;
1837
- 
1838
-   case 72:
1839
--#line 772 "/usr/homes/chet/src/bash/src/parse.y"
1840
-+#line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1841
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1842
-     break;
1843
- 
1844
-   case 73:
1845
--#line 774 "/usr/homes/chet/src/bash/src/parse.y"
1846
-+#line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1847
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1848
-     break;
1849
- 
1850
-   case 74:
1851
--#line 776 "/usr/homes/chet/src/bash/src/parse.y"
1852
-+#line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1853
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
1854
-     break;
1855
- 
1856
-   case 75:
1857
--#line 780 "/usr/homes/chet/src/bash/src/parse.y"
1858
-+#line 785 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1859
-     {
1860
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1861
- 			  if (word_top > 0) word_top--;
1862
-@@ -2706,7 +2711,7 @@
1863
-     break;
1864
- 
1865
-   case 76:
1866
--#line 785 "/usr/homes/chet/src/bash/src/parse.y"
1867
-+#line 790 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1868
-     {
1869
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1870
- 			  if (word_top > 0) word_top--;
1871
-@@ -2714,7 +2719,7 @@
1872
-     break;
1873
- 
1874
-   case 77:
1875
--#line 790 "/usr/homes/chet/src/bash/src/parse.y"
1876
-+#line 795 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1877
-     {
1878
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1879
- 			  if (word_top > 0) word_top--;
1880
-@@ -2722,7 +2727,7 @@
1881
-     break;
1882
- 
1883
-   case 78:
1884
--#line 795 "/usr/homes/chet/src/bash/src/parse.y"
1885
-+#line 800 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1886
-     {
1887
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1888
- 			  if (word_top > 0) word_top--;
1889
-@@ -2730,7 +2735,7 @@
1890
-     break;
1891
- 
1892
-   case 79:
1893
--#line 800 "/usr/homes/chet/src/bash/src/parse.y"
1894
-+#line 805 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1895
-     {
1896
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1897
- 			  if (word_top > 0) word_top--;
1898
-@@ -2738,7 +2743,7 @@
1899
-     break;
1900
- 
1901
-   case 80:
1902
--#line 805 "/usr/homes/chet/src/bash/src/parse.y"
1903
-+#line 810 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1904
-     {
1905
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1906
- 			  if (word_top > 0) word_top--;
1907
-@@ -2746,7 +2751,7 @@
1908
-     break;
1909
- 
1910
-   case 81:
1911
--#line 810 "/usr/homes/chet/src/bash/src/parse.y"
1912
-+#line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1913
-     {
1914
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1915
- 			  if (word_top > 0) word_top--;
1916
-@@ -2754,7 +2759,7 @@
1917
-     break;
1918
- 
1919
-   case 82:
1920
--#line 815 "/usr/homes/chet/src/bash/src/parse.y"
1921
-+#line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1922
-     {
1923
- 			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1924
- 			  if (word_top > 0) word_top--;
1925
-@@ -2762,7 +2767,7 @@
1926
-     break;
1927
- 
1928
-   case 83:
1929
--#line 822 "/usr/homes/chet/src/bash/src/parse.y"
1930
-+#line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1931
-     {
1932
- 				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1933
- 				  if (word_top > 0) word_top--;
1934
-@@ -2770,7 +2775,7 @@
1935
-     break;
1936
- 
1937
-   case 84:
1938
--#line 827 "/usr/homes/chet/src/bash/src/parse.y"
1939
-+#line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1940
-     {
1941
- 				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1942
- 				  if (word_top > 0) word_top--;
1943
-@@ -2778,7 +2783,7 @@
1944
-     break;
1945
- 
1946
-   case 85:
1947
--#line 832 "/usr/homes/chet/src/bash/src/parse.y"
1948
-+#line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1949
-     {
1950
- 				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1951
- 				  if (word_top > 0) word_top--;
1952
-@@ -2786,7 +2791,7 @@
1953
-     break;
1954
- 
1955
-   case 86:
1956
--#line 837 "/usr/homes/chet/src/bash/src/parse.y"
1957
-+#line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1958
-     {
1959
- 				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1960
- 				  if (word_top > 0) word_top--;
1961
-@@ -2794,7 +2799,7 @@
1962
-     break;
1963
- 
1964
-   case 87:
1965
--#line 844 "/usr/homes/chet/src/bash/src/parse.y"
1966
-+#line 849 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1967
-     {
1968
- 			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1969
- 			  if (word_top > 0) word_top--;
1970
-@@ -2802,7 +2807,7 @@
1971
-     break;
1972
- 
1973
-   case 88:
1974
--#line 849 "/usr/homes/chet/src/bash/src/parse.y"
1975
-+#line 854 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1976
-     {
1977
- 			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1978
- 			  if (word_top > 0) word_top--;
1979
-@@ -2810,7 +2815,7 @@
1980
-     break;
1981
- 
1982
-   case 89:
1983
--#line 854 "/usr/homes/chet/src/bash/src/parse.y"
1984
-+#line 859 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1985
-     {
1986
- 			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1987
- 			  if (word_top > 0) word_top--;
1988
-@@ -2818,7 +2823,7 @@
1989
-     break;
1990
- 
1991
-   case 90:
1992
--#line 859 "/usr/homes/chet/src/bash/src/parse.y"
1993
-+#line 864 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1994
-     {
1995
- 			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1996
- 			  if (word_top > 0) word_top--;
1997
-@@ -2826,7 +2831,7 @@
1998
-     break;
1999
- 
2000
-   case 91:
2001
--#line 864 "/usr/homes/chet/src/bash/src/parse.y"
2002
-+#line 869 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2003
-     {
2004
- 			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
2005
- 			  if (word_top > 0) word_top--;
2006
-@@ -2834,7 +2839,7 @@
2007
-     break;
2008
- 
2009
-   case 92:
2010
--#line 869 "/usr/homes/chet/src/bash/src/parse.y"
2011
-+#line 874 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2012
-     {
2013
- 			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
2014
- 			  if (word_top > 0) word_top--;
2015
-@@ -2842,7 +2847,7 @@
2016
-     break;
2017
- 
2018
-   case 93:
2019
--#line 876 "/usr/homes/chet/src/bash/src/parse.y"
2020
-+#line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2021
-     {
2022
- 			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
2023
- 			  if (word_top > 0) word_top--;
2024
-@@ -2850,7 +2855,7 @@
2025
-     break;
2026
- 
2027
-   case 94:
2028
--#line 881 "/usr/homes/chet/src/bash/src/parse.y"
2029
-+#line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2030
-     {
2031
- 			  (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
2032
- 			  if (word_top > 0) word_top--;
2033
-@@ -2858,7 +2863,7 @@
2034
-     break;
2035
- 
2036
-   case 95:
2037
--#line 886 "/usr/homes/chet/src/bash/src/parse.y"
2038
-+#line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2039
-     {
2040
- 			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
2041
- 			  if (word_top > 0) word_top--;
2042
-@@ -2866,27 +2871,27 @@
2043
-     break;
2044
- 
2045
-   case 96:
2046
--#line 893 "/usr/homes/chet/src/bash/src/parse.y"
2047
-+#line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2048
-     { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
2049
-     break;
2050
- 
2051
-   case 97:
2052
--#line 896 "/usr/homes/chet/src/bash/src/parse.y"
2053
-+#line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2054
-     { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
2055
-     break;
2056
- 
2057
-   case 98:
2058
--#line 899 "/usr/homes/chet/src/bash/src/parse.y"
2059
-+#line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2060
-     { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
2061
-     break;
2062
- 
2063
-   case 99:
2064
--#line 903 "/usr/homes/chet/src/bash/src/parse.y"
2065
-+#line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2066
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
2067
-     break;
2068
- 
2069
-   case 100:
2070
--#line 905 "/usr/homes/chet/src/bash/src/parse.y"
2071
-+#line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2072
-     {
2073
- 			  COMMAND *tc;
2074
- 
2075
-@@ -2918,7 +2923,7 @@
2076
-     break;
2077
- 
2078
-   case 101:
2079
--#line 936 "/usr/homes/chet/src/bash/src/parse.y"
2080
-+#line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2081
-     {
2082
- 			  (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
2083
- 			  (yyval.command)->flags |= CMD_WANT_SUBSHELL;
2084
-@@ -2926,7 +2931,7 @@
2085
-     break;
2086
- 
2087
-   case 102:
2088
--#line 943 "/usr/homes/chet/src/bash/src/parse.y"
2089
-+#line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2090
-     {
2091
- 			  (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
2092
- 			  (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
2093
-@@ -2934,7 +2939,7 @@
2094
-     break;
2095
- 
2096
-   case 103:
2097
--#line 948 "/usr/homes/chet/src/bash/src/parse.y"
2098
-+#line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2099
-     {
2100
- 			  COMMAND *tc;
2101
- 
2102
-@@ -2954,7 +2959,7 @@
2103
-     break;
2104
- 
2105
-   case 104:
2106
--#line 965 "/usr/homes/chet/src/bash/src/parse.y"
2107
-+#line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2108
-     {
2109
- 			  (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
2110
- 			  (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
2111
-@@ -2962,7 +2967,7 @@
2112
-     break;
2113
- 
2114
-   case 105:
2115
--#line 970 "/usr/homes/chet/src/bash/src/parse.y"
2116
-+#line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2117
-     {
2118
- 			  COMMAND *tc;
2119
- 
2120
-@@ -2982,7 +2987,7 @@
2121
-     break;
2122
- 
2123
-   case 106:
2124
--#line 987 "/usr/homes/chet/src/bash/src/parse.y"
2125
-+#line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2126
-     {
2127
- 			  (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
2128
- 			  (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
2129
-@@ -2990,117 +2995,117 @@
2130
-     break;
2131
- 
2132
-   case 107:
2133
--#line 994 "/usr/homes/chet/src/bash/src/parse.y"
2134
-+#line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2135
-     { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
2136
-     break;
2137
- 
2138
-   case 108:
2139
--#line 996 "/usr/homes/chet/src/bash/src/parse.y"
2140
-+#line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2141
-     { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
2142
-     break;
2143
- 
2144
-   case 109:
2145
--#line 998 "/usr/homes/chet/src/bash/src/parse.y"
2146
-+#line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2147
-     { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
2148
-     break;
2149
- 
2150
-   case 110:
2151
--#line 1003 "/usr/homes/chet/src/bash/src/parse.y"
2152
-+#line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2153
-     { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
2154
-     break;
2155
- 
2156
-   case 111:
2157
--#line 1007 "/usr/homes/chet/src/bash/src/parse.y"
2158
-+#line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2159
-     { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
2160
-     break;
2161
- 
2162
-   case 112:
2163
--#line 1011 "/usr/homes/chet/src/bash/src/parse.y"
2164
-+#line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2165
-     { (yyval.command) = (yyvsp[(2) - (3)].command); }
2166
-     break;
2167
- 
2168
-   case 113:
2169
--#line 1015 "/usr/homes/chet/src/bash/src/parse.y"
2170
-+#line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2171
-     { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
2172
-     break;
2173
- 
2174
-   case 114:
2175
--#line 1017 "/usr/homes/chet/src/bash/src/parse.y"
2176
-+#line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2177
-     { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
2178
-     break;
2179
- 
2180
-   case 115:
2181
--#line 1019 "/usr/homes/chet/src/bash/src/parse.y"
2182
-+#line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2183
-     { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
2184
-     break;
2185
- 
2186
-   case 117:
2187
--#line 1024 "/usr/homes/chet/src/bash/src/parse.y"
2188
-+#line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2189
-     { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
2190
-     break;
2191
- 
2192
-   case 118:
2193
--#line 1028 "/usr/homes/chet/src/bash/src/parse.y"
2194
-+#line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2195
-     { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
2196
-     break;
2197
- 
2198
-   case 119:
2199
--#line 1030 "/usr/homes/chet/src/bash/src/parse.y"
2200
-+#line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2201
-     { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
2202
-     break;
2203
- 
2204
-   case 120:
2205
--#line 1032 "/usr/homes/chet/src/bash/src/parse.y"
2206
-+#line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2207
-     { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
2208
-     break;
2209
- 
2210
-   case 121:
2211
--#line 1034 "/usr/homes/chet/src/bash/src/parse.y"
2212
-+#line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2213
-     { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
2214
-     break;
2215
- 
2216
-   case 122:
2217
--#line 1038 "/usr/homes/chet/src/bash/src/parse.y"
2218
-+#line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2219
-     { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
2220
-     break;
2221
- 
2222
-   case 123:
2223
--#line 1040 "/usr/homes/chet/src/bash/src/parse.y"
2224
-+#line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2225
-     { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
2226
-     break;
2227
- 
2228
-   case 124:
2229
--#line 1042 "/usr/homes/chet/src/bash/src/parse.y"
2230
-+#line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2231
-     { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
2232
-     break;
2233
- 
2234
-   case 125:
2235
--#line 1044 "/usr/homes/chet/src/bash/src/parse.y"
2236
-+#line 1049 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2237
-     { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
2238
-     break;
2239
- 
2240
-   case 126:
2241
--#line 1046 "/usr/homes/chet/src/bash/src/parse.y"
2242
-+#line 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2243
-     { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
2244
-     break;
2245
- 
2246
-   case 127:
2247
--#line 1048 "/usr/homes/chet/src/bash/src/parse.y"
2248
-+#line 1053 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2249
-     { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
2250
-     break;
2251
- 
2252
-   case 128:
2253
--#line 1052 "/usr/homes/chet/src/bash/src/parse.y"
2254
-+#line 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2255
-     { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
2256
-     break;
2257
- 
2258
-   case 129:
2259
--#line 1054 "/usr/homes/chet/src/bash/src/parse.y"
2260
-+#line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2261
-     { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
2262
-     break;
2263
- 
2264
-   case 130:
2265
--#line 1063 "/usr/homes/chet/src/bash/src/parse.y"
2266
-+#line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2267
-     {
2268
- 			  (yyval.command) = (yyvsp[(2) - (2)].command);
2269
- 			  if (need_here_doc)
2270
-@@ -3109,14 +3114,14 @@
2271
-     break;
2272
- 
2273
-   case 132:
2274
--#line 1072 "/usr/homes/chet/src/bash/src/parse.y"
2275
-+#line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2276
-     {
2277
- 			  (yyval.command) = (yyvsp[(2) - (2)].command);
2278
- 			}
2279
-     break;
2280
- 
2281
-   case 134:
2282
--#line 1079 "/usr/homes/chet/src/bash/src/parse.y"
2283
-+#line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2284
-     {
2285
- 			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
2286
- 			    (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&');
2287
-@@ -3126,17 +3131,17 @@
2288
-     break;
2289
- 
2290
-   case 136:
2291
--#line 1090 "/usr/homes/chet/src/bash/src/parse.y"
2292
-+#line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2293
-     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
2294
-     break;
2295
- 
2296
-   case 137:
2297
--#line 1092 "/usr/homes/chet/src/bash/src/parse.y"
2298
-+#line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2299
-     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
2300
-     break;
2301
- 
2302
-   case 138:
2303
--#line 1094 "/usr/homes/chet/src/bash/src/parse.y"
2304
-+#line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2305
-     {
2306
- 			  if ((yyvsp[(1) - (4)].command)->type == cm_connection)
2307
- 			    (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&');
2308
-@@ -3146,37 +3151,37 @@
2309
-     break;
2310
- 
2311
-   case 139:
2312
--#line 1101 "/usr/homes/chet/src/bash/src/parse.y"
2313
-+#line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2314
-     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
2315
-     break;
2316
- 
2317
-   case 140:
2318
--#line 1103 "/usr/homes/chet/src/bash/src/parse.y"
2319
-+#line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2320
-     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
2321
-     break;
2322
- 
2323
-   case 141:
2324
--#line 1105 "/usr/homes/chet/src/bash/src/parse.y"
2325
-+#line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2326
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
2327
-     break;
2328
- 
2329
-   case 144:
2330
--#line 1113 "/usr/homes/chet/src/bash/src/parse.y"
2331
-+#line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2332
-     { (yyval.number) = '\n'; }
2333
-     break;
2334
- 
2335
-   case 145:
2336
--#line 1115 "/usr/homes/chet/src/bash/src/parse.y"
2337
-+#line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2338
-     { (yyval.number) = ';'; }
2339
-     break;
2340
- 
2341
-   case 146:
2342
--#line 1117 "/usr/homes/chet/src/bash/src/parse.y"
2343
-+#line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2344
-     { (yyval.number) = yacc_EOF; }
2345
-     break;
2346
- 
2347
-   case 149:
2348
--#line 1131 "/usr/homes/chet/src/bash/src/parse.y"
2349
-+#line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2350
-     {
2351
- 			  (yyval.command) = (yyvsp[(1) - (1)].command);
2352
- 			  if (need_here_doc)
2353
-@@ -3192,7 +3197,7 @@
2354
-     break;
2355
- 
2356
-   case 150:
2357
--#line 1144 "/usr/homes/chet/src/bash/src/parse.y"
2358
-+#line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2359
-     {
2360
- 			  if ((yyvsp[(1) - (2)].command)->type == cm_connection)
2361
- 			    (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&');
2362
-@@ -3211,7 +3216,7 @@
2363
-     break;
2364
- 
2365
-   case 151:
2366
--#line 1160 "/usr/homes/chet/src/bash/src/parse.y"
2367
-+#line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2368
-     {
2369
- 			  (yyval.command) = (yyvsp[(1) - (2)].command);
2370
- 			  if (need_here_doc)
2371
-@@ -3227,17 +3232,17 @@
2372
-     break;
2373
- 
2374
-   case 152:
2375
--#line 1175 "/usr/homes/chet/src/bash/src/parse.y"
2376
-+#line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2377
-     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
2378
-     break;
2379
- 
2380
-   case 153:
2381
--#line 1177 "/usr/homes/chet/src/bash/src/parse.y"
2382
-+#line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2383
-     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
2384
-     break;
2385
- 
2386
-   case 154:
2387
--#line 1179 "/usr/homes/chet/src/bash/src/parse.y"
2388
-+#line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2389
-     {
2390
- 			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
2391
- 			    (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&');
2392
-@@ -3247,22 +3252,22 @@
2393
-     break;
2394
- 
2395
-   case 155:
2396
--#line 1186 "/usr/homes/chet/src/bash/src/parse.y"
2397
-+#line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2398
-     { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
2399
-     break;
2400
- 
2401
-   case 156:
2402
--#line 1189 "/usr/homes/chet/src/bash/src/parse.y"
2403
-+#line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2404
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
2405
-     break;
2406
- 
2407
-   case 157:
2408
--#line 1193 "/usr/homes/chet/src/bash/src/parse.y"
2409
-+#line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2410
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
2411
-     break;
2412
- 
2413
-   case 158:
2414
--#line 1195 "/usr/homes/chet/src/bash/src/parse.y"
2415
-+#line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2416
-     {
2417
- 			  if ((yyvsp[(2) - (2)].command))
2418
- 			    (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN;	/* toggle */
2419
-@@ -3271,7 +3276,7 @@
2420
-     break;
2421
- 
2422
-   case 159:
2423
--#line 1201 "/usr/homes/chet/src/bash/src/parse.y"
2424
-+#line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2425
-     {
2426
- 			  if ((yyvsp[(2) - (2)].command))
2427
- 			    (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number);
2428
-@@ -3280,7 +3285,7 @@
2429
-     break;
2430
- 
2431
-   case 160:
2432
--#line 1207 "/usr/homes/chet/src/bash/src/parse.y"
2433
-+#line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2434
-     {
2435
- 			  ELEMENT x;
2436
- 
2437
-@@ -3300,7 +3305,7 @@
2438
-     break;
2439
- 
2440
-   case 161:
2441
--#line 1224 "/usr/homes/chet/src/bash/src/parse.y"
2442
-+#line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2443
-     {
2444
- 			  ELEMENT x;
2445
- 
2446
-@@ -3321,12 +3326,12 @@
2447
-     break;
2448
- 
2449
-   case 162:
2450
--#line 1244 "/usr/homes/chet/src/bash/src/parse.y"
2451
-+#line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2452
-     { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
2453
-     break;
2454
- 
2455
-   case 163:
2456
--#line 1246 "/usr/homes/chet/src/bash/src/parse.y"
2457
-+#line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2458
-     {
2459
- 			  /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
2460
- 			  COMMAND *tc;
2461
-@@ -3352,28 +3357,28 @@
2462
-     break;
2463
- 
2464
-   case 164:
2465
--#line 1269 "/usr/homes/chet/src/bash/src/parse.y"
2466
-+#line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2467
-     { (yyval.command) = (yyvsp[(1) - (1)].command); }
2468
-     break;
2469
- 
2470
-   case 165:
2471
--#line 1273 "/usr/homes/chet/src/bash/src/parse.y"
2472
-+#line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2473
-     { (yyval.number) = CMD_TIME_PIPELINE; }
2474
-     break;
2475
- 
2476
-   case 166:
2477
--#line 1275 "/usr/homes/chet/src/bash/src/parse.y"
2478
-+#line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2479
-     { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
2480
-     break;
2481
- 
2482
-   case 167:
2483
--#line 1277 "/usr/homes/chet/src/bash/src/parse.y"
2484
-+#line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2485
-     { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
2486
-     break;
2487
- 
2488
- 
2489
- /* Line 1267 of yacc.c.  */
2490
--#line 3377 "y.tab.c"
2491
-+#line 3382 "y.tab.c"
2492
-       default: break;
2493
-     }
2494
-   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2495
-@@ -3587,7 +3592,7 @@
2496
- }
2497
- 
2498
- 
2499
--#line 1279 "/usr/homes/chet/src/bash/src/parse.y"
2500
-+#line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2501
- 
2502
- 
2503
- /* Initial size to allocate for tokens, and the
2504
-@@ -4736,7 +4741,7 @@
2505
- 	 not already end in an EOF character.  */
2506
-       if (shell_input_line_terminator != EOF)
2507
- 	{
2508
--	  if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
2509
-+	  if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
2510
- 	    shell_input_line = (char *)xrealloc (shell_input_line,
2511
- 					1 + (shell_input_line_size += 2));
2512
- 
2513
-@@ -4845,6 +4850,16 @@
2514
-     eol_ungetc_lookahead = c;
2515
- }
2516
- 
2517
-+char *
2518
-+parser_remaining_input ()
2519
-+{
2520
-+  if (shell_input_line == 0)
2521
-+    return 0;
2522
-+  if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
2523
-+    return '\0';	/* XXX */
2524
-+  return (shell_input_line + shell_input_line_index);
2525
-+}
2526
-+
2527
- #ifdef INCLUDE_UNUSED
2528
- /* Back the input pointer up by one, effectively `ungetting' a character. */
2529
- static void
2530
-@@ -4948,13 +4963,28 @@
2531
-    which allow ESAC to be the next one read. */
2532
- static int esacs_needed_count;
2533
- 
2534
-+static void
2535
-+push_heredoc (r)
2536
-+     REDIRECT *r;
2537
-+{
2538
-+  if (need_here_doc >= HEREDOC_MAX)
2539
-+    {
2540
-+      last_command_exit_value = EX_BADUSAGE;
2541
-+      need_here_doc = 0;
2542
-+      report_syntax_error (_("maximum here-document count exceeded"));
2543
-+      reset_parser ();
2544
-+      exit_shell (last_command_exit_value);
2545
-+    }
2546
-+  redir_stack[need_here_doc++] = r;
2547
-+}
2548
-+
2549
- void
2550
- gather_here_documents ()
2551
- {
2552
-   int r;
2553
- 
2554
-   r = 0;
2555
--  while (need_here_doc)
2556
-+  while (need_here_doc > 0)
2557
-     {
2558
-       parser_state |= PST_HEREDOC;
2559
-       make_here_document (redir_stack[r++], line_number);
2560
-@@ -5265,6 +5295,8 @@
2561
-   FREE (word_desc_to_read);
2562
-   word_desc_to_read = (WORD_DESC *)NULL;
2563
- 
2564
-+  eol_ungetc_lookahead = 0;
2565
-+
2566
-   current_token = '\n';		/* XXX */
2567
-   last_read_token = '\n';
2568
-   token_to_read = '\n';
2569
-@@ -5710,7 +5742,7 @@
2570
-          within a double-quoted ${...} construct "an even number of
2571
-          unescaped double-quotes or single-quotes, if any, shall occur." */
2572
-       /* This was changed in Austin Group Interp 221 */
2573
--      if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
2574
-+      if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
2575
- 	continue;
2576
- 
2577
-       /* Could also check open == '`' if we want to parse grouping constructs
2578
-@@ -6317,8 +6349,8 @@
2579
-   reset_parser ();
2580
-   /* reset_parser clears shell_input_line and associated variables */
2581
-   restore_input_line_state (&ls);
2582
--  if (interactive)
2583
--    token_to_read = 0;
2584
-+
2585
-+  token_to_read = 0;
2586
- 
2587
-   /* Need to find how many characters parse_and_execute consumed, update
2588
-      *indp, if flags != 0, copy the portion of the string parsed into RET
2589
-@@ -8387,6 +8419,7 @@
2590
- 
2591
-   ps->expand_aliases = expand_aliases;
2592
-   ps->echo_input_at_read = echo_input_at_read;
2593
-+  ps->need_here_doc = need_here_doc;
2594
- 
2595
-   ps->token = token;
2596
-   ps->token_buffer_size = token_buffer_size;
2597
-@@ -8435,6 +8468,7 @@
2598
- 
2599
-   expand_aliases = ps->expand_aliases;
2600
-   echo_input_at_read = ps->echo_input_at_read;
2601
-+  need_here_doc = ps->need_here_doc;
2602
- 
2603
-   FREE (token);
2604
-   token = ps->token;
2605 1
deleted file mode 100644
... ...
@@ -1,267 +0,0 @@
1
-Submitted By:            Armin K. <krejzi at email dot com>
2
-Date:                    2015-02-06
3
-Initial Package Version: 4.3
4
-Upstream Status:         Already in upstream patch repo
5
-Origin:                  Upstream
6
-Description:             This patch contains upstream patch numbers 031 thru 033
7
-
8
-+++ b/bashline.c	2015-02-07 00:39:05.687378870 +0100
9
-@@ -202,6 +202,7 @@
10
- extern int last_command_exit_value;
11
- extern int array_needs_making;
12
- extern int posixly_correct, no_symbolic_links;
13
-+extern int sigalrm_seen;
14
- extern char *current_prompt_string, *ps1_prompt;
15
- extern STRING_INT_ALIST word_token_alist[];
16
- extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
17
-@@ -4208,8 +4209,9 @@
18
- {
19
-   /* If we're going to longjmp to top_level, make sure we clean up readline.
20
-      check_signals will call QUIT, which will eventually longjmp to top_level,
21
--     calling run_interrupt_trap along the way. */
22
--  if (interrupt_state)
23
-+     calling run_interrupt_trap along the way.  The check for sigalrm_seen is
24
-+     to clean up the read builtin's state. */
25
-+  if (terminating_signal || interrupt_state || sigalrm_seen)
26
-     rl_cleanup_after_signal ();
27
-   bashline_reset_event_hook ();
28
-   check_signals_and_traps ();	/* XXX */
29
-+++ b/builtins/common.h	2015-02-07 00:39:05.685378859 +0100
30
-@@ -122,6 +122,10 @@
31
- /* Functions from getopts.def */
32
- extern void getopts_reset __P((int));
33
- 
34
-+/* Functions from read.def */
35
-+extern void read_tty_cleanup __P((void));
36
-+extern int read_tty_modified __P((void));
37
-+
38
- /* Functions from set.def */
39
- extern int minus_o_option_value __P((char *));
40
- extern void list_minus_o_opts __P((int, int));
41
-+++ b/builtins/read.def	2015-02-07 00:39:05.685378859 +0100
42
-@@ -140,10 +140,12 @@
43
- procenv_t alrmbuf;
44
- int sigalrm_seen;
45
- 
46
--static int reading;
47
-+static int reading, tty_modified;
48
- static SigHandler *old_alrm;
49
- static unsigned char delim;
50
- 
51
-+static struct ttsave termsave;
52
-+
53
- /* In all cases, SIGALRM just sets a flag that we check periodically.  This
54
-    avoids problems with the semi-tricky stuff we do with the xfree of
55
-    input_string at the top of the unwind-protect list (see below). */
56
-@@ -188,7 +190,6 @@
57
-   struct stat tsb;
58
-   SHELL_VAR *var;
59
-   TTYSTRUCT ttattrs, ttset;
60
--  struct ttsave termsave;
61
- #if defined (ARRAY_VARS)
62
-   WORD_LIST *alist;
63
- #endif
64
-@@ -221,7 +222,7 @@
65
-   USE_VAR(ps2);
66
-   USE_VAR(lastsig);
67
- 
68
--  sigalrm_seen = reading = 0;
69
-+  sigalrm_seen = reading = tty_modified = 0;
70
- 
71
-   i = 0;		/* Index into the string that we are reading. */
72
-   raw = edit = 0;	/* Not reading raw input by default. */
73
-@@ -438,6 +439,8 @@
74
- 	  retval = 128+SIGALRM;
75
- 	  goto assign_vars;
76
- 	}
77
-+      if (interactive_shell == 0)
78
-+	initialize_terminating_signals ();
79
-       old_alrm = set_signal_handler (SIGALRM, sigalrm);
80
-       add_unwind_protect (reset_alarm, (char *)NULL);
81
- #if defined (READLINE)
82
-@@ -482,7 +485,10 @@
83
- 	  i = silent ? ttfd_cbreak (fd, &ttset) : ttfd_onechar (fd, &ttset);
84
- 	  if (i < 0)
85
- 	    sh_ttyerror (1);
86
-+	  tty_modified = 1;
87
- 	  add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
88
-+	  if (interactive_shell == 0)
89
-+	    initialize_terminating_signals ();
90
- 	}
91
-     }
92
-   else if (silent)	/* turn off echo but leave term in canonical mode */
93
-@@ -497,7 +503,10 @@
94
-       if (i < 0)
95
- 	sh_ttyerror (1);
96
- 
97
-+      tty_modified = 1;
98
-       add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
99
-+      if (interactive_shell == 0)
100
-+	initialize_terminating_signals ();
101
-     }
102
- 
103
-   /* This *must* be the top unwind-protect on the stack, so the manipulation
104
-@@ -588,6 +597,8 @@
105
- 	    }
106
- 	  else
107
- 	    lastsig = 0;
108
-+	  if (terminating_signal && tty_modified)
109
-+	    ttyrestore (&termsave);	/* fix terminal before exiting */
110
- 	  CHECK_TERMSIG;
111
- 	  eof = 1;
112
- 	  break;
113
-@@ -978,6 +989,20 @@
114
-      struct ttsave *ttp;
115
- {
116
-   ttsetattr (ttp->fd, ttp->attrs);
117
-+  tty_modified = 0;
118
-+}
119
-+
120
-+void
121
-+read_tty_cleanup ()
122
-+{
123
-+  if (tty_modified)
124
-+    ttyrestore (&termsave);
125
-+}
126
-+
127
-+int
128
-+read_tty_modified ()
129
-+{
130
-+  return (tty_modified);
131
- }
132
- 
133
- #if defined (READLINE)
134
-+++ b/jobs.c	2015-02-07 00:39:05.286376788 +0100
135
-@@ -3339,7 +3339,9 @@
136
-       if (posixly_correct && this_shell_builtin && this_shell_builtin == wait_builtin)
137
- 	{
138
- 	  interrupt_immediately = 0;
139
--	  trap_handler (SIGCHLD);	/* set pending_traps[SIGCHLD] */
140
-+	  /* This was trap_handler (SIGCHLD) but that can lose traps if
141
-+	     children_exited > 1 */
142
-+	  queue_sigchld_trap (children_exited);
143
- 	  wait_signal_received = SIGCHLD;
144
- 	  /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
145
- 	     run_pending_traps will call run_sigchld_trap later  */
146
-+++ b/patchlevel.h	2015-02-07 00:39:05.688378875 +0100
147
-@@ -25,6 +25,6 @@
148
-    regexp `^#define[ 	]*PATCHLEVEL', since that's what support/mkversion.sh
149
-    looks for to find the patch level (for the sccs version string). */
150
- 
151
--#define PATCHLEVEL 30
152
-+#define PATCHLEVEL 33
153
- 
154
- #endif /* _PATCHLEVEL_H_ */
155
-+++ b/shell.c	2015-02-07 00:39:05.684378854 +0100
156
-@@ -73,6 +73,7 @@
157
- #endif
158
- 
159
- #if defined (READLINE)
160
-+#  include <readline/readline.h>
161
- #  include "bashline.h"
162
- #endif
163
- 
164
-@@ -909,6 +910,14 @@
165
-   fflush (stdout);		/* XXX */
166
-   fflush (stderr);
167
- 
168
-+  /* Clean up the terminal if we are in a state where it's been modified. */
169
-+#if defined (READLINE)
170
-+  if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
171
-+    (*rl_deprep_term_function) ();
172
-+#endif
173
-+  if (read_tty_modified ())
174
-+    read_tty_cleanup ();
175
-+
176
-   /* Do trap[0] if defined.  Allow it to override the exit status
177
-      passed to us. */
178
-   if (signal_is_trapped (0))
179
-+++ b/sig.c	2015-02-07 00:39:05.688378875 +0100
180
-@@ -532,8 +532,10 @@
181
- #if defined (READLINE)
182
-   /* Set the event hook so readline will call it after the signal handlers
183
-      finish executing, so if this interrupted character input we can get
184
--     quick response. */
185
--  if (interactive_shell && interactive && no_line_editing == 0)
186
-+     quick response.  If readline is active or has modified the terminal we
187
-+     need to set this no matter what the signal is, though the check for
188
-+     RL_STATE_TERMPREPPED is possibly redundant. */
189
-+  if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED))
190
-     bashline_set_event_hook ();
191
- #endif
192
- 
193
-+++ b/subst.h	2015-02-07 00:39:05.022375417 +0100
194
-@@ -47,6 +47,7 @@
195
- #define ASS_MKASSOC	0x0004
196
- #define ASS_MKGLOBAL	0x0008	/* force global assignment */
197
- #define ASS_NAMEREF	0x0010	/* assigning to nameref variable */
198
-+#define ASS_FROMREF	0x0020	/* assigning from value of nameref variable */
199
- 
200
- /* Flags for the string extraction functions. */
201
- #define SX_NOALLOC	0x0001	/* just skip; don't return substring */
202
-+++ b/variables.c	2015-02-07 00:39:05.024375427 +0100
203
-@@ -2516,10 +2516,27 @@
204
-      HASH_TABLE *table;
205
-      int hflags, aflags;
206
- {
207
--  char *newval;
208
-+  char *newname, *newval;
209
-   SHELL_VAR *entry;
210
-+#if defined (ARRAY_VARS)
211
-+  arrayind_t ind;
212
-+  char *subp;
213
-+  int sublen;
214
-+#endif
215
- 
216
-+  newname = 0;
217
-+#if defined (ARRAY_VARS)
218
-+  if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name))
219
-+    {
220
-+      newname = array_variable_name (name, &subp, &sublen);
221
-+      if (newname == 0)
222
-+	return (SHELL_VAR *)NULL;	/* XXX */
223
-+      entry = hash_lookup (newname, table);
224
-+    }
225
-+  else
226
-+#endif
227
-   entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
228
-+
229
-   /* Follow the nameref chain here if this is the global variables table */
230
-   if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
231
-     {
232
-@@ -2550,6 +2567,16 @@
233
-       var_setvalue (entry, make_variable_value (entry, value, 0));
234
-       }
235
-     }
236
-+#if defined (ARRAY_VARS)
237
-+  else if (entry == 0 && newname)
238
-+    {
239
-+      entry = make_new_array_variable (newname);	/* indexed array by default */
240
-+      if (entry == 0)
241
-+	return entry;
242
-+      ind = array_expand_index (name, subp, sublen);
243
-+      bind_array_element (entry, ind, value, aflags);
244
-+    }
245
-+#endif
246
-   else if (entry == 0)
247
-     {
248
-       entry = make_new_variable (name, table);
249
-@@ -2670,7 +2697,8 @@
250
- 			 normal. */
251
- 		      if (nameref_cell (nv) == 0)
252
- 			return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
253
--		      return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags));
254
-+		      /* XXX - bug here with ref=array[index] */
255
-+		      return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF));
256
- 		    }
257
- 		  else
258
- 		    v = nv;
259 1
deleted file mode 100644
... ...
@@ -1,424 +0,0 @@
1
-Submitted By:            Armin K. <krejzi at email dot com>
2
-Date:                    2015-05-23
3
-Initial Package Version: 4.3
4
-Upstream Status:         Already in upstream patch repo
5
-Origin:                  Upstream
6
-Description:             This patch contains upstream patch numbers 031 thru 039
7
-
8
-+++ b/arrayfunc.c	2015-05-21 18:21:02.877941074 +0200
9
-@@ -404,6 +404,9 @@
10
-       (*var->assign_func) (var, l->word->word, i, 0);
11
-     else
12
-       array_insert (a, i, l->word->word);
13
-+
14
-+  VUNSETATTR (var, att_invisible);	/* no longer invisible */
15
-+
16
-   return var;
17
- }
18
- 
19
-@@ -634,6 +637,10 @@
20
- 
21
-   if (nlist)
22
-     dispose_words (nlist);
23
-+
24
-+  if (var)
25
-+    VUNSETATTR (var, att_invisible);	/* no longer invisible */
26
-+
27
-   return (var);
28
- }
29
- 
30
-+++ b/assoc.c	2015-05-21 18:21:00.158956999 +0200
31
-@@ -436,6 +436,8 @@
32
- #if 1
33
- 	if (sh_contains_shell_metas (tlist->key))
34
- 	  istr = sh_double_quote (tlist->key);
35
-+	else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0')
36
-+	  istr = sh_double_quote (tlist->key);	
37
- 	else
38
- 	  istr = tlist->key;	
39
- #else
40
-+++ b/bashline.c	2015-05-21 18:20:20.630188508 +0200
41
-@@ -202,6 +202,7 @@
42
- extern int last_command_exit_value;
43
- extern int array_needs_making;
44
- extern int posixly_correct, no_symbolic_links;
45
-+extern int sigalrm_seen;
46
- extern char *current_prompt_string, *ps1_prompt;
47
- extern STRING_INT_ALIST word_token_alist[];
48
- extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
49
-@@ -4208,8 +4209,9 @@
50
- {
51
-   /* If we're going to longjmp to top_level, make sure we clean up readline.
52
-      check_signals will call QUIT, which will eventually longjmp to top_level,
53
--     calling run_interrupt_trap along the way. */
54
--  if (interrupt_state)
55
-+     calling run_interrupt_trap along the way.  The check for sigalrm_seen is
56
-+     to clean up the read builtin's state. */
57
-+  if (terminating_signal || interrupt_state || sigalrm_seen)
58
-     rl_cleanup_after_signal ();
59
-   bashline_reset_event_hook ();
60
-   check_signals_and_traps ();	/* XXX */
61
-+++ b/builtins/common.h	2015-05-21 18:20:20.631188502 +0200
62
-@@ -122,6 +122,10 @@
63
- /* Functions from getopts.def */
64
- extern void getopts_reset __P((int));
65
- 
66
-+/* Functions from read.def */
67
-+extern void read_tty_cleanup __P((void));
68
-+extern int read_tty_modified __P((void));
69
-+
70
- /* Functions from set.def */
71
- extern int minus_o_option_value __P((char *));
72
- extern void list_minus_o_opts __P((int, int));
73
-+++ b/builtins/read.def	2015-05-21 18:20:20.631188502 +0200
74
-@@ -140,10 +140,12 @@
75
- procenv_t alrmbuf;
76
- int sigalrm_seen;
77
- 
78
--static int reading;
79
-+static int reading, tty_modified;
80
- static SigHandler *old_alrm;
81
- static unsigned char delim;
82
- 
83
-+static struct ttsave termsave;
84
-+
85
- /* In all cases, SIGALRM just sets a flag that we check periodically.  This
86
-    avoids problems with the semi-tricky stuff we do with the xfree of
87
-    input_string at the top of the unwind-protect list (see below). */
88
-@@ -188,7 +190,6 @@
89
-   struct stat tsb;
90
-   SHELL_VAR *var;
91
-   TTYSTRUCT ttattrs, ttset;
92
--  struct ttsave termsave;
93
- #if defined (ARRAY_VARS)
94
-   WORD_LIST *alist;
95
- #endif
96
-@@ -221,7 +222,7 @@
97
-   USE_VAR(ps2);
98
-   USE_VAR(lastsig);
99
- 
100
--  sigalrm_seen = reading = 0;
101
-+  sigalrm_seen = reading = tty_modified = 0;
102
- 
103
-   i = 0;		/* Index into the string that we are reading. */
104
-   raw = edit = 0;	/* Not reading raw input by default. */
105
-@@ -438,6 +439,8 @@
106
- 	  retval = 128+SIGALRM;
107
- 	  goto assign_vars;
108
- 	}
109
-+      if (interactive_shell == 0)
110
-+	initialize_terminating_signals ();
111
-       old_alrm = set_signal_handler (SIGALRM, sigalrm);
112
-       add_unwind_protect (reset_alarm, (char *)NULL);
113
- #if defined (READLINE)
114
-@@ -482,7 +485,10 @@
115
- 	  i = silent ? ttfd_cbreak (fd, &ttset) : ttfd_onechar (fd, &ttset);
116
- 	  if (i < 0)
117
- 	    sh_ttyerror (1);
118
-+	  tty_modified = 1;
119
- 	  add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
120
-+	  if (interactive_shell == 0)
121
-+	    initialize_terminating_signals ();
122
- 	}
123
-     }
124
-   else if (silent)	/* turn off echo but leave term in canonical mode */
125
-@@ -497,7 +503,10 @@
126
-       if (i < 0)
127
- 	sh_ttyerror (1);
128
- 
129
-+      tty_modified = 1;
130
-       add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
131
-+      if (interactive_shell == 0)
132
-+	initialize_terminating_signals ();
133
-     }
134
- 
135
-   /* This *must* be the top unwind-protect on the stack, so the manipulation
136
-@@ -588,6 +597,8 @@
137
- 	    }
138
- 	  else
139
- 	    lastsig = 0;
140
-+	  if (terminating_signal && tty_modified)
141
-+	    ttyrestore (&termsave);	/* fix terminal before exiting */
142
- 	  CHECK_TERMSIG;
143
- 	  eof = 1;
144
- 	  break;
145
-@@ -978,6 +989,20 @@
146
-      struct ttsave *ttp;
147
- {
148
-   ttsetattr (ttp->fd, ttp->attrs);
149
-+  tty_modified = 0;
150
-+}
151
-+
152
-+void
153
-+read_tty_cleanup ()
154
-+{
155
-+  if (tty_modified)
156
-+    ttyrestore (&termsave);
157
-+}
158
-+
159
-+int
160
-+read_tty_modified ()
161
-+{
162
-+  return (tty_modified);
163
- }
164
- 
165
- #if defined (READLINE)
166
-+++ b/builtins/set.def	2015-05-21 18:20:57.876970364 +0200
167
-@@ -751,9 +751,11 @@
168
-   WORD_LIST *list;
169
- {
170
-   int unset_function, unset_variable, unset_array, opt, nameref, any_failed;
171
-+  int global_unset_func, global_unset_var;
172
-   char *name;
173
- 
174
-   unset_function = unset_variable = unset_array = nameref = any_failed = 0;
175
-+  global_unset_func = global_unset_var = 0;
176
- 
177
-   reset_internal_getopt ();
178
-   while ((opt = internal_getopt (list, "fnv")) != -1)
179
-@@ -761,10 +763,10 @@
180
-       switch (opt)
181
- 	{
182
- 	case 'f':
183
--	  unset_function = 1;
184
-+	  global_unset_func = 1;
185
- 	  break;
186
- 	case 'v':
187
--	  unset_variable = 1;
188
-+	  global_unset_var = 1;
189
- 	  break;
190
- 	case 'n':
191
- 	  nameref = 1;
192
-@@ -777,7 +779,7 @@
193
- 
194
-   list = loptend;
195
- 
196
--  if (unset_function && unset_variable)
197
-+  if (global_unset_func && global_unset_var)
198
-     {
199
-       builtin_error (_("cannot simultaneously unset a function and a variable"));
200
-       return (EXECUTION_FAILURE);
201
-@@ -795,6 +797,9 @@
202
- 
203
-       name = list->word->word;
204
- 
205
-+      unset_function = global_unset_func;
206
-+      unset_variable = global_unset_var;
207
-+
208
- #if defined (ARRAY_VARS)
209
-       unset_array = 0;
210
-       if (!unset_function && valid_array_reference (name))
211
-+++ b/jobs.c	2015-05-21 18:20:20.632188497 +0200
212
-@@ -3339,7 +3339,9 @@
213
-       if (posixly_correct && this_shell_builtin && this_shell_builtin == wait_builtin)
214
- 	{
215
- 	  interrupt_immediately = 0;
216
--	  trap_handler (SIGCHLD);	/* set pending_traps[SIGCHLD] */
217
-+	  /* This was trap_handler (SIGCHLD) but that can lose traps if
218
-+	     children_exited > 1 */
219
-+	  queue_sigchld_trap (children_exited);
220
- 	  wait_signal_received = SIGCHLD;
221
- 	  /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
222
- 	     run_pending_traps will call run_sigchld_trap later  */
223
-+++ b/lib/sh/unicode.c	2015-05-21 18:20:58.415967207 +0200
224
-@@ -78,13 +78,15 @@
225
-   s = strrchr (locale, '.');
226
-   if (s)
227
-     {
228
--      strcpy (charsetbuf, s+1);
229
-+      strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1);
230
-+      charsetbuf[sizeof (charsetbuf) - 1] = '\0';
231
-       t = strchr (charsetbuf, '@');
232
-       if (t)
233
- 	*t = 0;
234
-       return charsetbuf;
235
-     }
236
--  strcpy (charsetbuf, locale);
237
-+  strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1);
238
-+  charsetbuf[sizeof (charsetbuf) - 1] = '\0';
239
-   return charsetbuf;
240
- }
241
- #endif
242
-+++ b/parse.y	2015-05-21 18:21:00.695953854 +0200
243
-@@ -2818,11 +2818,16 @@
244
-     case AND_AND:
245
-     case OR_OR:
246
-     case '&':
247
-+    case WHILE:
248
-     case DO:
249
-+    case UNTIL:
250
-+    case IF:
251
-     case THEN:
252
-+    case ELIF:
253
-     case ELSE:
254
-     case '{':		/* } */
255
--    case '(':		/* ) */
256
-+    case '(':		/* )( */
257
-+    case ')':		/* only valid in case statement */
258
-     case BANG:		/* ! time pipeline */
259
-     case TIME:		/* time time pipeline */
260
-     case TIMEOPT:	/* time -p time pipeline */
261
-+++ b/patchlevel.h	2015-05-21 18:21:02.880941057 +0200
262
-@@ -25,6 +25,6 @@
263
-    regexp `^#define[ 	]*PATCHLEVEL', since that's what support/mkversion.sh
264
-    looks for to find the patch level (for the sccs version string). */
265
- 
266
--#define PATCHLEVEL 30
267
-+#define PATCHLEVEL 39
268
- 
269
- #endif /* _PATCHLEVEL_H_ */
270
-+++ b/shell.c	2015-05-21 18:20:20.632188497 +0200
271
-@@ -73,6 +73,7 @@
272
- #endif
273
- 
274
- #if defined (READLINE)
275
-+#  include <readline/readline.h>
276
- #  include "bashline.h"
277
- #endif
278
- 
279
-@@ -909,6 +910,14 @@
280
-   fflush (stdout);		/* XXX */
281
-   fflush (stderr);
282
- 
283
-+  /* Clean up the terminal if we are in a state where it's been modified. */
284
-+#if defined (READLINE)
285
-+  if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
286
-+    (*rl_deprep_term_function) ();
287
-+#endif
288
-+  if (read_tty_modified ())
289
-+    read_tty_cleanup ();
290
-+
291
-   /* Do trap[0] if defined.  Allow it to override the exit status
292
-      passed to us. */
293
-   if (signal_is_trapped (0))
294
-+++ b/sig.c	2015-05-21 18:20:20.632188497 +0200
295
-@@ -532,8 +532,10 @@
296
- #if defined (READLINE)
297
-   /* Set the event hook so readline will call it after the signal handlers
298
-      finish executing, so if this interrupted character input we can get
299
--     quick response. */
300
--  if (interactive_shell && interactive && no_line_editing == 0)
301
-+     quick response.  If readline is active or has modified the terminal we
302
-+     need to set this no matter what the signal is, though the check for
303
-+     RL_STATE_TERMPREPPED is possibly redundant. */
304
-+  if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED))
305
-     bashline_set_event_hook ();
306
- #endif
307
- 
308
-+++ b/subst.h	2015-05-21 18:20:20.633188491 +0200
309
-@@ -47,6 +47,7 @@
310
- #define ASS_MKASSOC	0x0004
311
- #define ASS_MKGLOBAL	0x0008	/* force global assignment */
312
- #define ASS_NAMEREF	0x0010	/* assigning to nameref variable */
313
-+#define ASS_FROMREF	0x0020	/* assigning from value of nameref variable */
314
- 
315
- /* Flags for the string extraction functions. */
316
- #define SX_NOALLOC	0x0001	/* just skip; don't return substring */
317
-+++ b/variables.c	2015-05-21 18:20:59.606960232 +0200
318
-@@ -2516,10 +2516,27 @@
319
-      HASH_TABLE *table;
320
-      int hflags, aflags;
321
- {
322
--  char *newval;
323
-+  char *newname, *newval;
324
-   SHELL_VAR *entry;
325
-+#if defined (ARRAY_VARS)
326
-+  arrayind_t ind;
327
-+  char *subp;
328
-+  int sublen;
329
-+#endif
330
- 
331
-+  newname = 0;
332
-+#if defined (ARRAY_VARS)
333
-+  if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name))
334
-+    {
335
-+      newname = array_variable_name (name, &subp, &sublen);
336
-+      if (newname == 0)
337
-+	return (SHELL_VAR *)NULL;	/* XXX */
338
-+      entry = hash_lookup (newname, table);
339
-+    }
340
-+  else
341
-+#endif
342
-   entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
343
-+
344
-   /* Follow the nameref chain here if this is the global variables table */
345
-   if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
346
-     {
347
-@@ -2550,6 +2567,16 @@
348
-       var_setvalue (entry, make_variable_value (entry, value, 0));
349
-       }
350
-     }
351
-+#if defined (ARRAY_VARS)
352
-+  else if (entry == 0 && newname)
353
-+    {
354
-+      entry = make_new_array_variable (newname);	/* indexed array by default */
355
-+      if (entry == 0)
356
-+	return entry;
357
-+      ind = array_expand_index (name, subp, sublen);
358
-+      bind_array_element (entry, ind, value, aflags);
359
-+    }
360
-+#endif
361
-   else if (entry == 0)
362
-     {
363
-       entry = make_new_variable (name, table);
364
-@@ -2670,7 +2697,8 @@
365
- 			 normal. */
366
- 		      if (nameref_cell (nv) == 0)
367
- 			return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
368
--		      return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags));
369
-+		      /* XXX - bug here with ref=array[index] */
370
-+		      return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF));
371
- 		    }
372
- 		  else
373
- 		    v = nv;
374
-@@ -2805,10 +2833,12 @@
375
- #endif
376
-     v = bind_variable (lhs, rhs, 0);
377
- 
378
--  if (v && isint)
379
--    VSETATTR (v, att_integer);
380
--
381
--  VUNSETATTR (v, att_invisible);
382
-+  if (v)
383
-+    {
384
-+      if (isint)
385
-+	VSETATTR (v, att_integer);
386
-+      VUNSETATTR (v, att_invisible);
387
-+    }
388
- 
389
-   return (v);
390
- }
391
-+++ b/y.tab.c	2015-05-21 18:21:00.783953338 +0200
392
-@@ -5130,11 +5130,16 @@
393
-     case AND_AND:
394
-     case OR_OR:
395
-     case '&':
396
-+    case WHILE:
397
-     case DO:
398
-+    case UNTIL:
399
-+    case IF:
400
-     case THEN:
401
-+    case ELIF:
402
-     case ELSE:
403
-     case '{':		/* } */
404
--    case '(':		/* ) */
405
-+    case '(':		/* )( */
406
-+    case ')':		/* only valid in case statement */
407
-     case BANG:		/* ! time pipeline */
408
-     case TIME:		/* time time pipeline */
409
-     case TIMEOPT:	/* time -p time pipeline */
410 1
deleted file mode 100644
... ...
@@ -1,16 +0,0 @@
1
-diff -rup bash-4.3.30/variables.c bash-4.3.30-new/variables.c
2
-+++ bash-4.3.30-new/variables.c	2017-04-05 15:03:25.036413199 -0700
3
-@@ -495,7 +495,11 @@ initialize_shell_variables (env, privmod
4
- #endif
5
-       set_if_not ("PS2", secondary_prompt);
6
-     }
7
--  set_if_not ("PS4", "+ ");
8
-+
9
-+  if (current_user.euid == 0)
10
-+    bind_variable ("PS4", "+ ", 0);
11
-+  else
12
-+    set_if_not ("PS4", "+ ");
13
- 
14
-   /* Don't allow IFS to be imported from the environment. */
15
-   temp_var = bind_variable ("IFS", " \t\n", 0);
... ...
@@ -1,18 +1,68 @@
1 1
 Summary:  Bourne-Again SHell
2
-Name:   bash
3
-Version:  4.3.30
4
-Release:  10%{?dist}
2
+Name:     bash
3
+Version:  4.3.48
4
+Release:  1%{?dist}
5 5
 License:  GPLv3
6
-URL:    http://www.gnu.org/software/bash/
6
+URL:      https://www.gnu.org/software/bash/
7 7
 Group:    System Environment/Base
8 8
 Vendor:   VMware, Inc.
9 9
 Distribution: Photon
10
-Source0:  http://ftp.gnu.org/gnu/bash/%{name}-%{version}.tar.gz
11
-%define sha1 bash=33b1bcc5dca1b72f28b2baeca6efa0d422097964
12
-Patch0:   http://www.linuxfromscratch.org/patches/downloads/bash/bash-4.3.30-upstream_fixes-2.patch
13
-Patch1:   fix-save_bash_input-segfault.patch
14
-Patch2:   bash-4.3.patch
15
-Patch3:   bash-CVE-2016-7543.patch
10
+Source0:  http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
11
+%define   sha1 bash=45ac3c5727e7262334f4dfadecdf601b39434e84
12
+
13
+#Upstream patches
14
+Patch001: bash43-001
15
+Patch002: bash43-002
16
+Patch003: bash43-003
17
+Patch004: bash43-004
18
+Patch005: bash43-005
19
+Patch006: bash43-006
20
+Patch007: bash43-007
21
+Patch008: bash43-008
22
+Patch009: bash43-009
23
+Patch010: bash43-010
24
+Patch011: bash43-011
25
+Patch012: bash43-012
26
+Patch013: bash43-013
27
+Patch014: bash43-014
28
+Patch015: bash43-015
29
+Patch016: bash43-016
30
+Patch017: bash43-017
31
+Patch018: bash43-018
32
+Patch019: bash43-019
33
+Patch020: bash43-020
34
+Patch021: bash43-021
35
+Patch022: bash43-022
36
+Patch023: bash43-023
37
+Patch024: bash43-024
38
+Patch025: bash43-025
39
+Patch026: bash43-026
40
+Patch027: bash43-027
41
+Patch028: bash43-028
42
+Patch029: bash43-029
43
+Patch030: bash43-030
44
+Patch031: bash43-031
45
+Patch032: bash43-032
46
+Patch033: bash43-033
47
+Patch034: bash43-034
48
+Patch035: bash43-035
49
+Patch036: bash43-036
50
+Patch037: bash43-037
51
+Patch038: bash43-038
52
+Patch039: bash43-039
53
+Patch040: bash43-040
54
+Patch041: bash43-041
55
+Patch042: bash43-042
56
+Patch043: bash43-043
57
+Patch044: bash43-044
58
+Patch045: bash43-045
59
+Patch046: bash43-046
60
+Patch047: bash43-047
61
+Patch048: bash43-048
62
+
63
+Patch500:   fix-save_bash_input-segfault.patch
64
+Patch501:   bash-4.3.patch
65
+
16 66
 Provides: /bin/sh
17 67
 Provides: /bin/bash
18 68
 Requires(post): ncurses
... ...
@@ -23,24 +73,77 @@ The package contains the Bourne-Again SHell
23 23
 %package lang
24 24
 Summary: Additional language files for bash
25 25
 Group: System Environment/Base
26
-Requires: bash >= 4.3.30
26
+Requires: %{name} == %{version}-%{release}
27 27
 %description lang
28 28
 These are the additional language files of bash.
29 29
 
30 30
 %prep
31
-%setup -q
32
-%patch0 -p1
33
-%patch1 -p1
34
-%patch2 -p1
35
-%patch3 -p1
31
+%setup -q -n bash-4.3
32
+
33
+%patch001 -p0
34
+%patch002 -p0
35
+%patch003 -p0
36
+%patch004 -p0
37
+%patch005 -p0
38
+%patch006 -p0
39
+%patch007 -p0
40
+%patch008 -p0
41
+%patch009 -p0
42
+%patch010 -p0
43
+%patch011 -p0
44
+%patch012 -p0
45
+%patch013 -p0
46
+%patch014 -p0
47
+%patch015 -p0
48
+%patch016 -p0
49
+%patch017 -p0
50
+%patch018 -p0
51
+%patch019 -p0
52
+%patch020 -p0
53
+%patch021 -p0
54
+%patch022 -p0
55
+%patch023 -p0
56
+%patch024 -p0
57
+%patch025 -p0
58
+%patch026 -p0
59
+%patch027 -p0
60
+%patch028 -p0
61
+%patch029 -p0
62
+%patch030 -p0
63
+%patch031 -p0
64
+%patch032 -p0
65
+%patch033 -p0
66
+%patch034 -p0
67
+%patch035 -p0
68
+%patch036 -p0
69
+%patch037 -p0
70
+%patch038 -p0
71
+%patch039 -p0
72
+%patch040 -p0
73
+%patch041 -p0
74
+%patch042 -p0
75
+%patch043 -p0
76
+%patch044 -p0
77
+%patch045 -p0
78
+%patch046 -p0
79
+%patch047 -p0
80
+%patch048 -p0
81
+
82
+%patch500 -p1
83
+%patch501 -p1
84
+
36 85
 %build
37
-./configure \
38
-  --prefix=%{_prefix} \
39
-  --bindir=/bin \
40
-  --htmldir=%{_defaultdocdir}/%{name}-%{version} \
86
+%configure --bindir=/bin \
41 87
   --without-bash-malloc \
42 88
   --with-installed-readline 
43 89
 make %{?_smp_mflags}
90
+#check if the bash version matches our spec file
91
+BASHVERSION="$(./bashversion -r).$(./bashversion -v).$(./bashversion -p)"
92
+if [ "$BASHVERSION" != "%{version}" ]; then
93
+  echo "Please update the bash version to $BASHVERION" >&2
94
+  exit 1
95
+fi
96
+
44 97
 %install
45 98
 make DESTDIR=%{buildroot} install
46 99
 ln -s bash %{buildroot}/bin/sh
... ...
@@ -293,15 +396,24 @@ fi
293 293
 %files
294 294
 %defattr(-,root,root)
295 295
 /bin/*
296
-%{_sysconfdir}
297
-%{_defaultdocdir}/%{name}-%{version}/*
298
-%{_defaultdocdir}/%{name}/*
299
-%{_mandir}/*/*
296
+%{_sysconfdir}/bash.bashrc
297
+%{_sysconfdir}/dircolors
298
+%{_sysconfdir}/profile.d/*
299
+%{_sysconfdir}/skel/.bashrc
300
+%{_sysconfdir}/skel/.bash_logout
301
+%{_sysconfdir}/skel/.bash_profile
302
+
303
+%doc %{_defaultdocdir}/%{name}
304
+%doc %{_mandir}/*/*
300 305
 
301 306
 %files lang -f %{name}.lang
302 307
 %defattr(-,root,root)
303 308
 
304 309
 %changelog
310
+*   Thu Oct 19 2017 Bo Gan <ganb@vmware.com> 4.3.48-1
311
+-   Upstream patch level 48 applied
312
+-   Fix rpm version to match upstream patch level
313
+-   Address CVE-2016-0634
305 314
 *   Fri Jun 9 2017 Bo Gan <ganb@vmware.com> 4.3.30-10
306 315
 -   Add post dependency
307 316
 *   Fri Jun 2 2017 Divya Thaluru <dthaluru@vmware.com>  4.3.30-9
... ...
@@ -331,4 +443,3 @@ fi
331 331
 -   /etc/profile.d permission fix. Pack /etc files into rpm
332 332
 *   Wed Oct 22 2014 Divya Thaluru <dthaluru@vmware.com> 4.3-1
333 333
 -   Initial version
334
-
335 334
new file mode 100644
... ...
@@ -0,0 +1,58 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-001
5
+
6
+Bug-Reported-by:	NBaH <nbah@sfr.fr>
7
+Bug-Reference-ID:	<ler0b5$iu9$1@speranza.aioe.org>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html
9
+
10
+Bug-Description:
11
+
12
+A missing check for a valid option prevented `test -R' from working.  There
13
+is another problem that causes bash to look up the wrong variable name when
14
+processing the argument to `test -R'.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3/test.c	2014-02-04 16:52:58.000000000 -0500
19
+--- test.c	2014-02-28 21:22:44.000000000 -0500
20
+***************
21
+*** 647,652 ****
22
+  
23
+      case 'R':
24
+!       v = find_variable (arg);
25
+!       return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE);
26
+      }
27
+  
28
+--- 647,652 ----
29
+  
30
+      case 'R':
31
+!       v = find_variable_noref (arg);
32
+!       return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE);
33
+      }
34
+  
35
+***************
36
+*** 724,727 ****
37
+--- 724,728 ----
38
+      case 'u': case 'v': case 'w': case 'x': case 'z':
39
+      case 'G': case 'L': case 'O': case 'S': case 'N':
40
++     case 'R':
41
+        return (1);
42
+      }
43
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
44
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
45
+***************
46
+*** 26,30 ****
47
+     looks for to find the patch level (for the sccs version string). */
48
+  
49
+! #define PATCHLEVEL 0
50
+  
51
+  #endif /* _PATCHLEVEL_H_ */
52
+--- 26,30 ----
53
+     looks for to find the patch level (for the sccs version string). */
54
+  
55
+! #define PATCHLEVEL 1
56
+  
57
+  #endif /* _PATCHLEVEL_H_ */
0 58
new file mode 100644
... ...
@@ -0,0 +1,62 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-002
5
+
6
+Bug-Reported-by:	Moe Tunes <moetunes42@gmail.com>
7
+Bug-Reference-ID:	<53103F49.3070100@gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html
9
+
10
+Bug-Description:
11
+
12
+A change to save state while running the DEBUG trap caused pipelines to hang
13
+on systems which need process group synchronization while building pipelines.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3/trap.c	2014-02-05 10:03:21.000000000 -0500
18
+--- trap.c	2014-02-28 09:51:43.000000000 -0500
19
+***************
20
+*** 921,925 ****
21
+  
22
+  #if defined (JOB_CONTROL)
23
+!       save_pipeline (1);	/* XXX only provides one save level */
24
+  #endif
25
+  
26
+--- 921,926 ----
27
+  
28
+  #if defined (JOB_CONTROL)
29
+!       if (sig != DEBUG_TRAP)	/* run_debug_trap does this */
30
+! 	save_pipeline (1);	/* XXX only provides one save level */
31
+  #endif
32
+  
33
+***************
34
+*** 941,945 ****
35
+  
36
+  #if defined (JOB_CONTROL)
37
+!       restore_pipeline (1);
38
+  #endif
39
+  
40
+--- 942,947 ----
41
+  
42
+  #if defined (JOB_CONTROL)
43
+!       if (sig != DEBUG_TRAP)	/* run_debug_trap does this */
44
+! 	restore_pipeline (1);
45
+  #endif
46
+  
47
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
48
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
49
+***************
50
+*** 26,30 ****
51
+     looks for to find the patch level (for the sccs version string). */
52
+  
53
+! #define PATCHLEVEL 1
54
+  
55
+  #endif /* _PATCHLEVEL_H_ */
56
+--- 26,30 ----
57
+     looks for to find the patch level (for the sccs version string). */
58
+  
59
+! #define PATCHLEVEL 2
60
+  
61
+  #endif /* _PATCHLEVEL_H_ */
0 62
new file mode 100644
... ...
@@ -0,0 +1,48 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-003
5
+
6
+Bug-Reported-by:	Anatol Pomozov <anatol.pomozov@gmail.com>
7
+Bug-Reference-ID:	<CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html
9
+
10
+Bug-Description:
11
+
12
+When in callback mode, some readline commands can cause readline to seg
13
+fault by passing invalid contexts to callback functions.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3/lib/readline/readline.c	2013-10-28 14:58:06.000000000 -0400
18
+--- lib/readline/readline.c	2014-03-10 14:15:02.000000000 -0400
19
+***************
20
+*** 745,749 ****
21
+  
22
+    RL_CHECK_SIGNALS ();
23
+!   if (r == 0)			/* success! */
24
+      {
25
+        _rl_keyseq_chain_dispose ();
26
+--- 745,750 ----
27
+  
28
+    RL_CHECK_SIGNALS ();
29
+!   /* We only treat values < 0 specially to simulate recursion. */
30
+!   if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0))	/* success! or failure! */
31
+      {
32
+        _rl_keyseq_chain_dispose ();
33
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
34
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
35
+***************
36
+*** 26,30 ****
37
+     looks for to find the patch level (for the sccs version string). */
38
+  
39
+! #define PATCHLEVEL 2
40
+  
41
+  #endif /* _PATCHLEVEL_H_ */
42
+--- 26,30 ----
43
+     looks for to find the patch level (for the sccs version string). */
44
+  
45
+! #define PATCHLEVEL 3
46
+  
47
+  #endif /* _PATCHLEVEL_H_ */
0 48
new file mode 100644
... ...
@@ -0,0 +1,47 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-004
5
+
6
+Bug-Reported-by:	Daan van Rossum <daan@flash.uchicago.edu>
7
+Bug-Reference-ID:	<20140307072523.GA14250@flash.uchicago.edu>
8
+Bug-Reference-URL:	
9
+
10
+Bug-Description:
11
+
12
+The `.' command in vi mode cannot undo multi-key commands beginning with
13
+`c', `d', and `y' (command plus motion specifier).
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3/lib/readline/readline.c	2013-10-28 14:58:06.000000000 -0400
18
+--- lib/readline/readline.c	2014-03-07 15:20:33.000000000 -0500
19
+***************
20
+*** 965,969 ****
21
+    if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
22
+        key != ANYOTHERKEY &&
23
+!       rl_key_sequence_length == 1 &&	/* XXX */
24
+        _rl_vi_textmod_command (key))
25
+      _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
26
+--- 965,969 ----
27
+    if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
28
+        key != ANYOTHERKEY &&
29
+!       _rl_dispatching_keymap == vi_movement_keymap &&
30
+        _rl_vi_textmod_command (key))
31
+      _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
32
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
33
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
34
+***************
35
+*** 26,30 ****
36
+     looks for to find the patch level (for the sccs version string). */
37
+  
38
+! #define PATCHLEVEL 3
39
+  
40
+  #endif /* _PATCHLEVEL_H_ */
41
+--- 26,30 ----
42
+     looks for to find the patch level (for the sccs version string). */
43
+  
44
+! #define PATCHLEVEL 4
45
+  
46
+  #endif /* _PATCHLEVEL_H_ */
0 47
new file mode 100644
... ...
@@ -0,0 +1,63 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-005
5
+
6
+Bug-Reported-by:	David Sines <dave.gma@googlemail.com>
7
+Bug-Reference-ID:	<CAO3BAa_CK_Rgkhdfzs+NJ4KFYdB9qW3pvXQK0xLCi6GMmDU8bw@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html
9
+
10
+Bug-Description:
11
+
12
+When in Posix mode, bash did not correctly interpret the ANSI-C-style
13
+$'...' quoting mechanism when performing pattern substitution word
14
+expansions within double quotes.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3/parse.y	2014-02-11 09:42:10.000000000 -0500
19
+--- parse.y	2014-03-07 20:57:15.000000000 -0500
20
+***************
21
+*** 3399,3403 ****
22
+           unescaped double-quotes or single-quotes, if any, shall occur." */
23
+        /* This was changed in Austin Group Interp 221 */
24
+!       if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
25
+  	continue;
26
+  
27
+--- 3399,3403 ----
28
+           unescaped double-quotes or single-quotes, if any, shall occur." */
29
+        /* This was changed in Austin Group Interp 221 */
30
+!       if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
31
+  	continue;
32
+  
33
+*** ../bash-4.3/y.tab.c	2014-02-11 10:57:47.000000000 -0500
34
+--- y.tab.c	2014-03-28 10:41:15.000000000 -0400
35
+***************
36
+*** 5711,5715 ****
37
+           unescaped double-quotes or single-quotes, if any, shall occur." */
38
+        /* This was changed in Austin Group Interp 221 */
39
+!       if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
40
+  	continue;
41
+  
42
+--- 5711,5715 ----
43
+           unescaped double-quotes or single-quotes, if any, shall occur." */
44
+        /* This was changed in Austin Group Interp 221 */
45
+!       if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
46
+  	continue;
47
+  
48
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
49
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
50
+***************
51
+*** 26,30 ****
52
+     looks for to find the patch level (for the sccs version string). */
53
+  
54
+! #define PATCHLEVEL 4
55
+  
56
+  #endif /* _PATCHLEVEL_H_ */
57
+--- 26,30 ----
58
+     looks for to find the patch level (for the sccs version string). */
59
+  
60
+! #define PATCHLEVEL 5
61
+  
62
+  #endif /* _PATCHLEVEL_H_ */
0 63
new file mode 100644
... ...
@@ -0,0 +1,48 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-006
5
+
6
+Bug-Reported-by:	Eduardo A . Bustamante Lopez <dualbus@gmail.com>
7
+Bug-Reference-ID:	<20140228170013.GA16015@dualbus.me>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html
9
+
10
+Bug-Description:
11
+
12
+A shell that started with job control active but was not interactive left
13
+the terminal in the wrong process group when exiting, causing its parent
14
+shell to get a stop signal when it attempted to read from the terminal.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3/jobs.c	2014-01-10 09:05:34.000000000 -0500
19
+--- jobs.c	2014-03-02 18:05:09.000000000 -0500
20
+***************
21
+*** 4375,4379 ****
22
+  end_job_control ()
23
+  {
24
+!   if (interactive_shell)		/* XXX - should it be interactive? */
25
+      {
26
+        terminate_stopped_jobs ();
27
+--- 4375,4379 ----
28
+  end_job_control ()
29
+  {
30
+!   if (interactive_shell || job_control)		/* XXX - should it be just job_control? */
31
+      {
32
+        terminate_stopped_jobs ();
33
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
34
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
35
+***************
36
+*** 26,30 ****
37
+     looks for to find the patch level (for the sccs version string). */
38
+  
39
+! #define PATCHLEVEL 5
40
+  
41
+  #endif /* _PATCHLEVEL_H_ */
42
+--- 26,30 ----
43
+     looks for to find the patch level (for the sccs version string). */
44
+  
45
+! #define PATCHLEVEL 6
46
+  
47
+  #endif /* _PATCHLEVEL_H_ */
0 48
new file mode 100644
... ...
@@ -0,0 +1,50 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-007
5
+
6
+Bug-Reported-by:	geir.hauge@gmail.com
7
+Bug-Reference-ID:	<20140318093650.B181C1C5B0B@gina.itea.ntnu.no>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html
9
+
10
+Bug-Description:
11
+
12
+Using compound assignments for associative arrays like
13
+
14
+assoc=( [x]= [y]=bar )
15
+
16
+left the value corresponding to the key `x' NULL.  This caused subsequent
17
+lookups to interpret it as unset.
18
+
19
+Patch (apply with `patch -p0'):
20
+
21
+*** ../bash-4.3/arrayfunc.c	2013-08-02 16:19:59.000000000 -0400
22
+--- arrayfunc.c	2014-03-18 11:08:15.000000000 -0400
23
+***************
24
+*** 598,601 ****
25
+--- 598,606 ----
26
+  	{
27
+  	  val = expand_assignment_string_to_string (val, 0);
28
++ 	  if (val == 0)
29
++ 	    {
30
++ 	      val = (char *)xmalloc (1);
31
++ 	      val[0] = '\0';	/* like do_assignment_internal */
32
++ 	    }
33
+  	  free_val = 1;
34
+  	}
35
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
36
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
37
+***************
38
+*** 26,30 ****
39
+     looks for to find the patch level (for the sccs version string). */
40
+  
41
+! #define PATCHLEVEL 6
42
+  
43
+  #endif /* _PATCHLEVEL_H_ */
44
+--- 26,30 ----
45
+     looks for to find the patch level (for the sccs version string). */
46
+  
47
+! #define PATCHLEVEL 7
48
+  
49
+  #endif /* _PATCHLEVEL_H_ */
0 50
new file mode 100644
... ...
@@ -0,0 +1,188 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-008
5
+
6
+Bug-Reported-by:	Stephane Chazelas <stephane.chazelas@gmail.com>
7
+Bug-Reference-ID:	<20140318135901.GB22158@chaz.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
9
+
10
+Bug-Description:
11
+
12
+Some extended glob patterns incorrectly matched filenames with a leading
13
+dot, regardless of the setting of the `dotglob' option.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3/lib/glob/gmisc.c	2013-10-28 14:45:25.000000000 -0400
18
+--- lib/glob/gmisc.c	2014-03-19 09:16:08.000000000 -0400
19
+***************
20
+*** 211,214 ****
21
+--- 211,215 ----
22
+      case '!':
23
+      case '@':
24
++     case '?':
25
+        return (pat[1] == LPAREN);
26
+      default:
27
+*** ../bash-4.3/lib/glob/glob.c	2014-01-31 21:43:51.000000000 -0500
28
+--- lib/glob/glob.c	2014-03-20 09:01:26.000000000 -0400
29
+***************
30
+*** 180,202 ****
31
+       int flags;
32
+  {
33
+!   char *pp, *pe, *t;
34
+!   int n, r;
35
+  
36
+    pp = pat + 2;
37
+!   pe = pp + strlen (pp) - 1;	/*(*/
38
+!   if (*pe != ')')
39
+!     return 0;
40
+!   if ((t = strchr (pp, '|')) == 0)	/* easy case first */
41
+      {
42
+        *pe = '\0';
43
+        r = skipname (pp, dname, flags);	/*(*/
44
+        *pe = ')';
45
+        return r;
46
+      }
47
+    while (t = glob_patscan (pp, pe, '|'))
48
+      {
49
+        n = t[-1];
50
+        t[-1] = '\0';
51
+        r = skipname (pp, dname, flags);
52
+        t[-1] = n;
53
+        if (r == 0)	/* if any pattern says not skip, we don't skip */
54
+--- 180,215 ----
55
+       int flags;
56
+  {
57
+!   char *pp, *pe, *t, *se;
58
+!   int n, r, negate;
59
+  
60
++   negate = *pat == '!';
61
+    pp = pat + 2;
62
+!   se = pp + strlen (pp) - 1;		/* end of string */
63
+!   pe = glob_patscan (pp, se, 0);	/* end of extglob pattern (( */
64
+!   /* we should check for invalid extglob pattern here */
65
+!   /* if pe != se we have more of the pattern at the end of the extglob
66
+!      pattern. Check the easy case first ( */
67
+!   if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
68
+      {
69
+        *pe = '\0';
70
++ #if defined (HANDLE_MULTIBYTE)
71
++       r = mbskipname (pp, dname, flags);
72
++ #else
73
+        r = skipname (pp, dname, flags);	/*(*/
74
++ #endif
75
+        *pe = ')';
76
+        return r;
77
+      }
78
++ 
79
++   /* check every subpattern */
80
+    while (t = glob_patscan (pp, pe, '|'))
81
+      {
82
+        n = t[-1];
83
+        t[-1] = '\0';
84
++ #if defined (HANDLE_MULTIBYTE)
85
++       r = mbskipname (pp, dname, flags);
86
++ #else
87
+        r = skipname (pp, dname, flags);
88
++ #endif
89
+        t[-1] = n;
90
+        if (r == 0)	/* if any pattern says not skip, we don't skip */
91
+***************
92
+*** 205,219 ****
93
+      }	/*(*/
94
+  
95
+!   if (pp == pe)		/* glob_patscan might find end of pattern */
96
+      return r;
97
+  
98
+!   *pe = '\0';
99
+! #  if defined (HANDLE_MULTIBYTE)
100
+!   r = mbskipname (pp, dname, flags);	/*(*/
101
+! #  else
102
+!   r = skipname (pp, dname, flags);	/*(*/
103
+! #  endif
104
+!   *pe = ')';
105
+!   return r;
106
+  }
107
+  #endif
108
+--- 218,227 ----
109
+      }	/*(*/
110
+  
111
+!   /* glob_patscan might find end of pattern */
112
+!   if (pp == se)
113
+      return r;
114
+  
115
+!   /* but if it doesn't then we didn't match a leading dot */
116
+!   return 0;
117
+  }
118
+  #endif
119
+***************
120
+*** 278,289 ****
121
+  {
122
+  #if EXTENDED_GLOB
123
+!   wchar_t *pp, *pe, *t, n;
124
+!   int r;
125
+  
126
+    pp = pat + 2;
127
+!   pe = pp + wcslen (pp) - 1;	/*(*/
128
+!   if (*pe != L')')
129
+!     return 0;
130
+!   if ((t = wcschr (pp, L'|')) == 0)
131
+      {
132
+        *pe = L'\0';
133
+--- 286,298 ----
134
+  {
135
+  #if EXTENDED_GLOB
136
+!   wchar_t *pp, *pe, *t, n, *se;
137
+!   int r, negate;
138
+  
139
++   negate = *pat == L'!';
140
+    pp = pat + 2;
141
+!   se = pp + wcslen (pp) - 1;	/*(*/
142
+!   pe = glob_patscan_wc (pp, se, 0);
143
+! 
144
+!   if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
145
+      {
146
+        *pe = L'\0';
147
+***************
148
+*** 292,295 ****
149
+--- 301,306 ----
150
+        return r;
151
+      }
152
++ 
153
++   /* check every subpattern */
154
+    while (t = glob_patscan_wc (pp, pe, '|'))
155
+      {
156
+***************
157
+*** 306,313 ****
158
+      return r;
159
+  
160
+!   *pe = L'\0';
161
+!   r = wchkname (pp, dname);	/*(*/
162
+!   *pe = L')';
163
+!   return r;
164
+  #else
165
+    return (wchkname (pat, dname));
166
+--- 317,322 ----
167
+      return r;
168
+  
169
+!   /* but if it doesn't then we didn't match a leading dot */
170
+!   return 0;
171
+  #else
172
+    return (wchkname (pat, dname));
173
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
174
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
175
+***************
176
+*** 26,30 ****
177
+     looks for to find the patch level (for the sccs version string). */
178
+  
179
+! #define PATCHLEVEL 7
180
+  
181
+  #endif /* _PATCHLEVEL_H_ */
182
+--- 26,30 ----
183
+     looks for to find the patch level (for the sccs version string). */
184
+  
185
+! #define PATCHLEVEL 8
186
+  
187
+  #endif /* _PATCHLEVEL_H_ */
0 188
new file mode 100644
... ...
@@ -0,0 +1,64 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-009
5
+
6
+Bug-Reported-by:	Matthias Klose <doko@debian.org>
7
+Bug-Reference-ID:	<53346FC8.6090005@debian.org>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html
9
+
10
+Bug-Description:
11
+
12
+There is a problem with unsigned sign extension when attempting to reallocate
13
+the input line when it is fewer than 3 characters long and there has been a
14
+history expansion.  The sign extension causes the shell to not reallocate the
15
+line, which results in a segmentation fault when it writes past the end.
16
+
17
+Patch (apply with `patch -p0'):
18
+
19
+*** ../bash-4.3-patched/parse.y	2014-02-11 09:42:10.000000000 -0500
20
+--- parse.y	2014-03-27 16:33:29.000000000 -0400
21
+***************
22
+*** 2425,2429 ****
23
+        if (shell_input_line_terminator != EOF)
24
+  	{
25
+! 	  if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
26
+  	    shell_input_line = (char *)xrealloc (shell_input_line,
27
+  					1 + (shell_input_line_size += 2));
28
+--- 2425,2429 ----
29
+        if (shell_input_line_terminator != EOF)
30
+  	{
31
+! 	  if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
32
+  	    shell_input_line = (char *)xrealloc (shell_input_line,
33
+  					1 + (shell_input_line_size += 2));
34
+*** ../bash-4.3-patched/y.tab.c	2014-03-28 11:17:06.000000000 -0400
35
+--- y.tab.c	2014-04-07 11:48:31.000000000 -0400
36
+***************
37
+*** 4737,4741 ****
38
+        if (shell_input_line_terminator != EOF)
39
+  	{
40
+! 	  if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
41
+  	    shell_input_line = (char *)xrealloc (shell_input_line,
42
+  					1 + (shell_input_line_size += 2));
43
+--- 4737,4741 ----
44
+        if (shell_input_line_terminator != EOF)
45
+  	{
46
+! 	  if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size))
47
+  	    shell_input_line = (char *)xrealloc (shell_input_line,
48
+  					1 + (shell_input_line_size += 2));
49
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
50
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
51
+***************
52
+*** 26,30 ****
53
+     looks for to find the patch level (for the sccs version string). */
54
+  
55
+! #define PATCHLEVEL 8
56
+  
57
+  #endif /* _PATCHLEVEL_H_ */
58
+--- 26,30 ----
59
+     looks for to find the patch level (for the sccs version string). */
60
+  
61
+! #define PATCHLEVEL 9
62
+  
63
+  #endif /* _PATCHLEVEL_H_ */
0 64
new file mode 100644
... ...
@@ -0,0 +1,157 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-010
5
+
6
+Bug-Reported-by:	Albert Shih <Albert.Shih@obspm.fr>
7
+Bug-Reference-ID:	Wed, 5 Mar 2014 23:01:40 +0100
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html
9
+
10
+Bug-Description:
11
+
12
+Patch (apply with `patch -p0'):
13
+
14
+This patch changes the behavior of programmable completion to compensate
15
+for two assumptions made by the bash-completion package.  Bash-4.3 changed
16
+to dequote the argument to programmable completion only under certain
17
+circumstances, to make the behavior of compgen more consistent when run
18
+from the command line -- closer to the behavior when run by a shell function
19
+run as part of programmable completion.  Bash-completion can pass quoted
20
+arguments to compgen when the original word to be completed was not quoted,
21
+expecting programmable completion to dequote the word before attempting
22
+completion.
23
+
24
+This patch fixes two cases:
25
+
26
+1.  An empty string that bash-completion passes to compgen as a quoted null
27
+    string ('').
28
+
29
+2.  An unquoted word that bash-completion quotes using single quotes or
30
+    backslashes before passing it to compgen.
31
+
32
+In these cases, since readline did not detect a quote character in the original
33
+word to be completed, bash-4.3 
34
+
35
+*** ../bash-4.3/externs.h	2014-01-02 14:58:20.000000000 -0500
36
+--- externs.h	2014-03-13 14:42:57.000000000 -0400
37
+***************
38
+*** 325,328 ****
39
+--- 325,329 ----
40
+  extern char *sh_backslash_quote_for_double_quotes __P((char *));
41
+  extern int sh_contains_shell_metas __P((char *));
42
++ extern int sh_contains_quotes __P((char *));
43
+  
44
+  /* declarations for functions defined in lib/sh/spell.c */
45
+*** ../bash-4.3/lib/sh/shquote.c	2013-03-31 21:53:32.000000000 -0400
46
+--- lib/sh/shquote.c	2014-03-13 14:42:57.000000000 -0400
47
+***************
48
+*** 312,313 ****
49
+--- 312,327 ----
50
+    return (0);
51
+  }
52
++ 
53
++ int
54
++ sh_contains_quotes (string)
55
++      char *string;
56
++ {
57
++   char *s;
58
++ 
59
++   for (s = string; s && *s; s++)
60
++     {
61
++       if (*s == '\'' || *s == '"' || *s == '\\')
62
++ 	return 1;
63
++     }
64
++   return 0;
65
++ }
66
+*** ../bash-4.3/pcomplete.c	2013-08-26 15:23:45.000000000 -0400
67
+--- pcomplete.c	2014-03-25 17:23:23.000000000 -0400
68
+***************
69
+*** 184,187 ****
70
+--- 184,188 ----
71
+  COMPSPEC *pcomp_curcs;
72
+  const char *pcomp_curcmd;
73
++ const char *pcomp_curtxt;
74
+  
75
+  #ifdef DEBUG
76
+***************
77
+*** 754,757 ****
78
+--- 755,784 ----
79
+  	  dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
80
+  	}
81
++       /* Intended to solve a mismatched assumption by bash-completion.  If
82
++ 	 the text to be completed is empty, but bash-completion turns it into
83
++ 	 a quoted string ('') assuming that this code will dequote it before
84
++ 	 calling readline, do the dequoting. */
85
++       else if (iscompgen && iscompleting &&
86
++ 	       pcomp_curtxt && *pcomp_curtxt == 0 &&
87
++ 	       text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && 
88
++ 	       rl_filename_dequoting_function)
89
++ 	dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
90
++       /* Another mismatched assumption by bash-completion.  If compgen is being
91
++       	 run as part of bash-completion, and the argument to compgen is not
92
++       	 the same as the word originally passed to the programmable completion
93
++       	 code, dequote the argument if it has quote characters.  It's an
94
++       	 attempt to detect when bash-completion is quoting its filename
95
++       	 argument before calling compgen. */
96
++       /* We could check whether gen_shell_function_matches is in the call
97
++ 	 stack by checking whether the gen-shell-function-matches tag is in
98
++ 	 the unwind-protect stack, but there's no function to do that yet.
99
++ 	 We could simply check whether we're executing in a function by
100
++ 	 checking variable_context, and may end up doing that. */
101
++       else if (iscompgen && iscompleting && rl_filename_dequoting_function &&
102
++ 	       pcomp_curtxt && text &&
103
++ 	       STREQ (pcomp_curtxt, text) == 0 &&
104
++ 	       variable_context &&
105
++ 	       sh_contains_quotes (text))	/* guess */
106
++ 	dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
107
+        else
108
+  	dfn = savestring (text);
109
+***************
110
+*** 1523,1527 ****
111
+  {
112
+    COMPSPEC *cs, *oldcs;
113
+!   const char *oldcmd;
114
+    STRINGLIST *ret;
115
+  
116
+--- 1550,1554 ----
117
+  {
118
+    COMPSPEC *cs, *oldcs;
119
+!   const char *oldcmd, *oldtxt;
120
+    STRINGLIST *ret;
121
+  
122
+***************
123
+*** 1546,1552 ****
124
+--- 1573,1581 ----
125
+    oldcs = pcomp_curcs;
126
+    oldcmd = pcomp_curcmd;
127
++   oldtxt = pcomp_curtxt;
128
+  
129
+    pcomp_curcs = cs;
130
+    pcomp_curcmd = cmd;
131
++   pcomp_curtxt = word;
132
+  
133
+    ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
134
+***************
135
+*** 1554,1557 ****
136
+--- 1583,1587 ----
137
+    pcomp_curcs = oldcs;
138
+    pcomp_curcmd = oldcmd;
139
++   pcomp_curtxt = oldtxt;
140
+  
141
+    /* We need to conditionally handle setting *retryp here */
142
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
143
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
144
+***************
145
+*** 26,30 ****
146
+     looks for to find the patch level (for the sccs version string). */
147
+  
148
+! #define PATCHLEVEL 9
149
+  
150
+  #endif /* _PATCHLEVEL_H_ */
151
+--- 26,30 ----
152
+     looks for to find the patch level (for the sccs version string). */
153
+  
154
+! #define PATCHLEVEL 10
155
+  
156
+  #endif /* _PATCHLEVEL_H_ */
0 157
new file mode 100644
... ...
@@ -0,0 +1,49 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-011
5
+
6
+Bug-Reported-by:	Egmont Koblinger <egmont@gmail.com>
7
+Bug-Reference-ID:	<CAGWcZk+bU5Jo1M+tutGvL-250UBE9DXjpeJVofYJSFcqFEVfMg@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html
9
+
10
+Bug-Description:
11
+
12
+The signal handling changes to bash and readline (to avoid running any code
13
+in a signal handler context) cause the cursor to be placed on the wrong
14
+line of a multi-line command after a ^C interrupts editing.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/lib/readline/display.c	2013-12-27 13:10:56.000000000 -0500
19
+--- lib/readline/display.c	2014-03-27 11:52:45.000000000 -0400
20
+***************
21
+*** 2678,2682 ****
22
+    if (_rl_echoing_p)
23
+      {
24
+!       _rl_move_vert (_rl_vis_botlin);
25
+        _rl_vis_botlin = 0;
26
+        fflush (rl_outstream);
27
+--- 2678,2683 ----
28
+    if (_rl_echoing_p)
29
+      {
30
+!       if (_rl_vis_botlin > 0)	/* minor optimization plus bug fix */
31
+! 	_rl_move_vert (_rl_vis_botlin);
32
+        _rl_vis_botlin = 0;
33
+        fflush (rl_outstream);
34
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
35
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
36
+***************
37
+*** 26,30 ****
38
+     looks for to find the patch level (for the sccs version string). */
39
+  
40
+! #define PATCHLEVEL 10
41
+  
42
+  #endif /* _PATCHLEVEL_H_ */
43
+--- 26,30 ----
44
+     looks for to find the patch level (for the sccs version string). */
45
+  
46
+! #define PATCHLEVEL 11
47
+  
48
+  #endif /* _PATCHLEVEL_H_ */
0 49
new file mode 100644
... ...
@@ -0,0 +1,43 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-012
5
+
6
+Bug-Reported-by:	Eduardo A. Bustamante López<dualbus@gmail.com>
7
+Bug-Reference-ID:	<5346B54C.4070205@case.edu>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html
9
+
10
+Bug-Description:
11
+
12
+When a SIGCHLD trap runs a command containing a shell builtin while
13
+a script is running `wait' to wait for all running children to complete,
14
+the SIGCHLD trap will not be run once for each child that terminates.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/jobs.c	2014-03-28 10:54:19.000000000 -0400
19
+--- jobs.c	2014-04-15 08:47:03.000000000 -0400
20
+***************
21
+*** 3598,3601 ****
22
+--- 3598,3602 ----
23
+    unwind_protect_pointer (the_pipeline);
24
+    unwind_protect_pointer (subst_assign_varlist);
25
++   unwind_protect_pointer (this_shell_builtin);
26
+  
27
+    /* We have to add the commands this way because they will be run
28
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
29
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
30
+***************
31
+*** 26,30 ****
32
+     looks for to find the patch level (for the sccs version string). */
33
+  
34
+! #define PATCHLEVEL 11
35
+  
36
+  #endif /* _PATCHLEVEL_H_ */
37
+--- 26,30 ----
38
+     looks for to find the patch level (for the sccs version string). */
39
+  
40
+! #define PATCHLEVEL 12
41
+  
42
+  #endif /* _PATCHLEVEL_H_ */
0 43
new file mode 100644
... ...
@@ -0,0 +1,66 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-013
5
+
6
+Bug-Reported-by:	<Trond.Endrestol@ximalas.info>
7
+Bug-Reference-ID:	<alpine.BSF.2.03.1404192114310.1973@enterprise.ximalas.info>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html
9
+
10
+Bug-Description:
11
+
12
+Using reverse-i-search when horizontal scrolling is enabled does not redisplay
13
+the entire line containing the successful search results.
14
+
15
+Patch (apply with `patch -p0'):
16
+*** ../bash-4.3-patched/lib/readline/display.c	2014-04-08 18:19:36.000000000 -0400
17
+--- lib/readline/display.c	2014-04-20 18:32:52.000000000 -0400
18
+***************
19
+*** 1638,1642 ****
20
+       the spot of first difference is before the end of the invisible chars,
21
+       lendiff needs to be adjusted. */
22
+!   if (current_line == 0 && !_rl_horizontal_scroll_mode &&
23
+        current_invis_chars != visible_wrap_offset)
24
+      {
25
+--- 1638,1642 ----
26
+       the spot of first difference is before the end of the invisible chars,
27
+       lendiff needs to be adjusted. */
28
+!   if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
29
+        current_invis_chars != visible_wrap_offset)
30
+      {
31
+***************
32
+*** 1826,1831 ****
33
+  		_rl_last_c_pos += bytes_to_insert;
34
+  
35
+  	      if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
36
+! 		goto clear_rest_of_line;
37
+  	    }
38
+  	}
39
+--- 1826,1836 ----
40
+  		_rl_last_c_pos += bytes_to_insert;
41
+  
42
++ 	      /* XXX - we only want to do this if we are at the end of the line
43
++ 		 so we move there with _rl_move_cursor_relative */
44
+  	      if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
45
+! 		{
46
+! 		  _rl_move_cursor_relative (ne-new, new);
47
+! 		  goto clear_rest_of_line;
48
+! 		}
49
+  	    }
50
+  	}
51
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
52
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
53
+***************
54
+*** 26,30 ****
55
+     looks for to find the patch level (for the sccs version string). */
56
+  
57
+! #define PATCHLEVEL 12
58
+  
59
+  #endif /* _PATCHLEVEL_H_ */
60
+--- 26,30 ----
61
+     looks for to find the patch level (for the sccs version string). */
62
+  
63
+! #define PATCHLEVEL 13
64
+  
65
+  #endif /* _PATCHLEVEL_H_ */
0 66
new file mode 100644
... ...
@@ -0,0 +1,102 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-014
5
+
6
+Bug-Reported-by:	Greg Wooledge <wooledg@eeg.ccf.org>
7
+Bug-Reference-ID:	<20140418202123.GB7660@eeg.ccf.org>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html
9
+
10
+Bug-Description:
11
+
12
+Under certain circumstances, $@ is expanded incorrectly in contexts where
13
+word splitting is not performed.
14
+
15
+Patch (apply with `patch -p0'):
16
+*** ../bash-4.3-patched/subst.c	2014-01-23 16:26:37.000000000 -0500
17
+--- subst.c	2014-04-19 15:41:26.000000000 -0400
18
+***************
19
+*** 3249,3254 ****
20
+--- 3249,3256 ----
21
+      return ((char *)NULL);
22
+  
23
++   expand_no_split_dollar_star = 1;
24
+    w->flags |= W_NOSPLIT2;
25
+    l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
26
++   expand_no_split_dollar_star = 0;
27
+    if (l)
28
+      {
29
+***************
30
+*** 7848,7851 ****
31
+--- 7850,7857 ----
32
+  	 according to POSIX.2, this expands to a list of the positional
33
+  	 parameters no matter what IFS is set to. */
34
++       /* XXX - what to do when in a context where word splitting is not
35
++ 	 performed? Even when IFS is not the default, posix seems to imply
36
++ 	 that we behave like unquoted $* ?  Maybe we should use PF_NOSPLIT2
37
++ 	 here. */
38
+        temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted);
39
+  
40
+***************
41
+*** 8817,8820 ****
42
+--- 8823,8827 ----
43
+      {
44
+        char *ifs_chars;
45
++       char *tstring;
46
+  
47
+        ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL;
48
+***************
49
+*** 8831,8834 ****
50
+--- 8838,8865 ----
51
+        if (split_on_spaces)
52
+  	list = list_string (istring, " ", 1);	/* XXX quoted == 1? */
53
++       /* If we have $@ (has_dollar_at != 0) and we are in a context where we
54
++ 	 don't want to split the result (W_NOSPLIT2), and we are not quoted,
55
++ 	 we have already separated the arguments with the first character of
56
++ 	 $IFS.  In this case, we want to return a list with a single word
57
++ 	 with the separator possibly replaced with a space (it's what other
58
++ 	 shells seem to do).
59
++ 	 quoted_dollar_at is internal to this function and is set if we are
60
++ 	 passed an argument that is unquoted (quoted == 0) but we encounter a
61
++ 	 double-quoted $@ while expanding it. */
62
++       else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2))
63
++ 	{
64
++ 	  /* Only split and rejoin if we have to */
65
++ 	  if (*ifs_chars && *ifs_chars != ' ')
66
++ 	    {
67
++ 	      list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
68
++ 	      tstring = string_list (list);
69
++ 	    }
70
++ 	  else
71
++ 	    tstring = istring;
72
++ 	  tword = make_bare_word (tstring);
73
++ 	  if (tstring != istring)
74
++ 	    free (tstring);
75
++ 	  goto set_word_flags;
76
++ 	}
77
+        else if (has_dollar_at && ifs_chars)
78
+  	list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1);
79
+***************
80
+*** 8836,8839 ****
81
+--- 8867,8871 ----
82
+  	{
83
+  	  tword = make_bare_word (istring);
84
++ set_word_flags:
85
+  	  if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
86
+  	    tword->flags |= W_QUOTED;
87
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
88
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
89
+***************
90
+*** 26,30 ****
91
+     looks for to find the patch level (for the sccs version string). */
92
+  
93
+! #define PATCHLEVEL 13
94
+  
95
+  #endif /* _PATCHLEVEL_H_ */
96
+--- 26,30 ----
97
+     looks for to find the patch level (for the sccs version string). */
98
+  
99
+! #define PATCHLEVEL 14
100
+  
101
+  #endif /* _PATCHLEVEL_H_ */
0 102
new file mode 100644
... ...
@@ -0,0 +1,58 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-015
5
+
6
+Bug-Reported-by:	Clark Wang <dearvoid@gmail.com>
7
+Bug-Reference-ID:	<CADv8-og2TOSoabXeNVXVGaXN3tEMHnYVq1rwOLe5meaRPSGRig@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html
9
+
10
+Bug-Description:
11
+
12
+When completing directory names, the directory name is dequoted twice.
13
+This causes problems for directories with single and double quotes in
14
+their names.
15
+
16
+Patch (apply with `patch -p0'):
17
+*** ../bash-4.3-patched/bashline.c	2014-02-09 19:56:58.000000000 -0500
18
+--- bashline.c	2014-04-25 14:57:52.000000000 -0400
19
+***************
20
+*** 4168,4174 ****
21
+  
22
+    qc = rl_dispatching ? rl_completion_quote_character : 0;  
23
+!   dfn = bash_dequote_filename ((char *)text, qc);
24
+    m1 = rl_completion_matches (dfn, rl_filename_completion_function);
25
+!   free (dfn);
26
+  
27
+    if (m1 == 0 || m1[0] == 0)
28
+--- 4209,4222 ----
29
+  
30
+    qc = rl_dispatching ? rl_completion_quote_character : 0;  
31
+!   /* If rl_completion_found_quote != 0, rl_completion_matches will call the
32
+!      filename dequoting function, causing the directory name to be dequoted
33
+!      twice. */
34
+!   if (rl_dispatching && rl_completion_found_quote == 0)
35
+!     dfn = bash_dequote_filename ((char *)text, qc);
36
+!   else
37
+!     dfn = (char *)text;
38
+    m1 = rl_completion_matches (dfn, rl_filename_completion_function);
39
+!   if (dfn != text)
40
+!     free (dfn);
41
+  
42
+    if (m1 == 0 || m1[0] == 0)
43
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
44
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
45
+***************
46
+*** 26,30 ****
47
+     looks for to find the patch level (for the sccs version string). */
48
+  
49
+! #define PATCHLEVEL 14
50
+  
51
+  #endif /* _PATCHLEVEL_H_ */
52
+--- 26,30 ----
53
+     looks for to find the patch level (for the sccs version string). */
54
+  
55
+! #define PATCHLEVEL 15
56
+  
57
+  #endif /* _PATCHLEVEL_H_ */
0 58
new file mode 100644
... ...
@@ -0,0 +1,132 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-016
5
+
6
+Bug-Reported-by:	Pierre Gaston <pierre.gaston@gmail.com>
7
+Bug-Reference-ID:	<CAPSX3sTCD61k1VQLJ5r-LWzEt+e7Xc-fxXmwn2u8EA5gJJej8Q@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html
9
+
10
+Bug-Description:
11
+
12
+An extended glob pattern containing a slash (`/') causes the globbing code
13
+to misinterpret it as a directory separator.
14
+
15
+Patch (apply with `patch -p0'):
16
+*** ../bash-4.3-patched/lib/glob/glob.c	2014-03-28 10:54:23.000000000 -0400
17
+--- lib/glob/glob.c	2014-05-02 10:24:28.000000000 -0400
18
+***************
19
+*** 124,127 ****
20
+--- 124,129 ----
21
+  extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int));
22
+  
23
++ extern char *glob_dirscan __P((char *, int));
24
++ 
25
+  /* Compile `glob_loop.c' for single-byte characters. */
26
+  #define CHAR	unsigned char
27
+***************
28
+*** 188,191 ****
29
+--- 190,196 ----
30
+    pe = glob_patscan (pp, se, 0);	/* end of extglob pattern (( */
31
+    /* we should check for invalid extglob pattern here */
32
++   if (pe == 0)
33
++     return 0;
34
++ 
35
+    /* if pe != se we have more of the pattern at the end of the extglob
36
+       pattern. Check the easy case first ( */
37
+***************
38
+*** 1016,1020 ****
39
+    char **result;
40
+    unsigned int result_size;
41
+!   char *directory_name, *filename, *dname;
42
+    unsigned int directory_len;
43
+    int free_dirname;			/* flag */
44
+--- 1021,1025 ----
45
+    char **result;
46
+    unsigned int result_size;
47
+!   char *directory_name, *filename, *dname, *fn;
48
+    unsigned int directory_len;
49
+    int free_dirname;			/* flag */
50
+***************
51
+*** 1032,1035 ****
52
+--- 1037,1052 ----
53
+    /* Find the filename.  */
54
+    filename = strrchr (pathname, '/');
55
++ #if defined (EXTENDED_GLOB)
56
++   if (filename && extended_glob)
57
++     {
58
++       fn = glob_dirscan (pathname, '/');
59
++ #if DEBUG_MATCHING
60
++       if (fn != filename)
61
++ 	fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename);
62
++ #endif
63
++       filename = fn;
64
++     }
65
++ #endif
66
++ 
67
+    if (filename == NULL)
68
+      {
69
+*** ../bash-4.3-patched/lib/glob/gmisc.c	2014-03-28 10:54:23.000000000 -0400
70
+--- lib/glob/gmisc.c	2014-05-02 09:35:57.000000000 -0400
71
+***************
72
+*** 43,46 ****
73
+--- 43,48 ----
74
+  #define WRPAREN         L')'
75
+  
76
++ extern char *glob_patscan __P((char *, char *, int));
77
++ 
78
+  /* Return 1 of the first character of WSTRING could match the first
79
+     character of pattern WPAT.  Wide character version. */
80
+***************
81
+*** 376,377 ****
82
+--- 378,410 ----
83
+    return matlen;
84
+  }
85
++ 
86
++ /* Skip characters in PAT and return the final occurrence of DIRSEP.  This
87
++    is only called when extended_glob is set, so we have to skip over extglob
88
++    patterns x(...) */
89
++ char *
90
++ glob_dirscan (pat, dirsep)
91
++      char *pat;
92
++      int dirsep;
93
++ {
94
++   char *p, *d, *pe, *se;
95
++ 
96
++   d = pe = se = 0;
97
++   for (p = pat; p && *p; p++)
98
++     {
99
++       if (extglob_pattern_p (p))
100
++ 	{
101
++ 	  if (se == 0)
102
++ 	    se = p + strlen (p) - 1;
103
++ 	  pe = glob_patscan (p + 2, se, 0);
104
++ 	  if (pe == 0)
105
++ 	    continue;
106
++ 	  else if (*pe == 0)
107
++ 	    break;
108
++ 	  p = pe - 1;	/* will do increment above */
109
++ 	  continue;
110
++ 	}
111
++       if (*p ==  dirsep)
112
++ 	d = p;
113
++     }
114
++   return d;
115
++ }
116
+
117
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
118
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
119
+***************
120
+*** 26,30 ****
121
+     looks for to find the patch level (for the sccs version string). */
122
+  
123
+! #define PATCHLEVEL 15
124
+  
125
+  #endif /* _PATCHLEVEL_H_ */
126
+--- 26,30 ----
127
+     looks for to find the patch level (for the sccs version string). */
128
+  
129
+! #define PATCHLEVEL 16
130
+  
131
+  #endif /* _PATCHLEVEL_H_ */
0 132
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-017
5
+
6
+Bug-Reported-by:	Dan Douglas <ormaaj@gmail.com>
7
+Bug-Reference-ID:	<7781746.RhfoTROLxF@smorgbox>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html
9
+
10
+Bug-Description:
11
+
12
+The code that creates local variables should not clear the `invisible'
13
+attribute when returning an existing local variable.  Let the code that
14
+actually assigns a value clear it.
15
+
16
+Patch (apply with `patch -p0'):
17
+*** ../bash-4.3-patched/variables.c	2014-02-14 11:55:12.000000000 -0500
18
+--- variables.c	2014-05-07 10:53:57.000000000 -0400
19
+***************
20
+*** 2198,2205 ****
21
+    old_var = find_variable (name);
22
+    if (old_var && local_p (old_var) && old_var->context == variable_context)
23
+!     {
24
+!       VUNSETATTR (old_var, att_invisible);	/* XXX */
25
+!       return (old_var);
26
+!     }
27
+  
28
+    was_tmpvar = old_var && tempvar_p (old_var);
29
+--- 2260,2264 ----
30
+    old_var = find_variable (name);
31
+    if (old_var && local_p (old_var) && old_var->context == variable_context)
32
+!     return (old_var);
33
+  
34
+    was_tmpvar = old_var && tempvar_p (old_var);
35
+
36
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
37
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
38
+***************
39
+*** 26,30 ****
40
+     looks for to find the patch level (for the sccs version string). */
41
+  
42
+! #define PATCHLEVEL 16
43
+  
44
+  #endif /* _PATCHLEVEL_H_ */
45
+--- 26,30 ----
46
+     looks for to find the patch level (for the sccs version string). */
47
+  
48
+! #define PATCHLEVEL 17
49
+  
50
+  #endif /* _PATCHLEVEL_H_ */
0 51
new file mode 100644
... ...
@@ -0,0 +1,44 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-018
5
+
6
+Bug-Reported-by:	Geir Hauge <geir.hauge@gmail.com>
7
+Bug-Reference-ID:	<CAO-BiTLOvfPXDypg61jcBausADrxUKJejakV2WTWP26cW0=rgA@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html
9
+
10
+Bug-Description:
11
+
12
+When assigning an array variable using the compound assignment syntax,
13
+but using `declare' with the rhs of the compound assignment quoted, the
14
+shell did not mark the variable as visible after successfully performing
15
+the assignment.
16
+
17
+Patch (apply with `patch -p0'):
18
+*** ../bash-4.3-patched/arrayfunc.c	2014-03-28 10:54:21.000000000 -0400
19
+--- arrayfunc.c	2014-05-12 11:19:00.000000000 -0400
20
+***************
21
+*** 180,183 ****
22
+--- 180,184 ----
23
+    FREE (newval);
24
+  
25
++   VUNSETATTR (entry, att_invisible);	/* no longer invisible */
26
+    return (entry);
27
+  }
28
+
29
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
30
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
31
+***************
32
+*** 26,30 ****
33
+     looks for to find the patch level (for the sccs version string). */
34
+  
35
+! #define PATCHLEVEL 17
36
+  
37
+  #endif /* _PATCHLEVEL_H_ */
38
+--- 26,30 ----
39
+     looks for to find the patch level (for the sccs version string). */
40
+  
41
+! #define PATCHLEVEL 18
42
+  
43
+  #endif /* _PATCHLEVEL_H_ */
0 44
new file mode 100644
... ...
@@ -0,0 +1,84 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-019
5
+
6
+Bug-Reported-by:	John Lenton
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:	https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476
9
+
10
+Bug-Description:
11
+
12
+The -t timeout option to `read' does not work when the -e option is used.
13
+
14
+Patch (apply with `patch -p0'):
15
+
16
+*** ../bash-4.3-patched/lib/readline/input.c	2014-01-10 15:07:08.000000000 -0500
17
+--- lib/readline/input.c	2014-05-22 18:40:59.000000000 -0400
18
+***************
19
+*** 535,540 ****
20
+--- 538,551 ----
21
+        else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM)
22
+  	return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
23
++       /* keyboard-generated signals of interest */
24
+        else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT)
25
+          RL_CHECK_SIGNALS ();
26
++       /* non-keyboard-generated signals of interest */
27
++       else if (_rl_caught_signal == SIGALRM
28
++ #if defined (SIGVTALRM)
29
++ 		|| _rl_caught_signal == SIGVTALRM
30
++ #endif
31
++ 	      )
32
++         RL_CHECK_SIGNALS ();
33
+  
34
+        if (rl_signal_event_hook)
35
+*** ../bash-4.3-patched/builtins/read.def	2013-09-02 11:54:00.000000000 -0400
36
+--- builtins/read.def	2014-05-08 11:43:35.000000000 -0400
37
+***************
38
+*** 443,447 ****
39
+  #if defined (READLINE)
40
+        if (edit)
41
+! 	add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
42
+  #endif
43
+        falarm (tmsec, tmusec);
44
+--- 443,450 ----
45
+  #if defined (READLINE)
46
+        if (edit)
47
+! 	{
48
+! 	  add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
49
+! 	  add_unwind_protect (bashline_reset_event_hook, (char *)NULL);
50
+! 	}
51
+  #endif
52
+        falarm (tmsec, tmusec);
53
+***************
54
+*** 1022,1025 ****
55
+--- 1025,1029 ----
56
+    old_attempted_completion_function = rl_attempted_completion_function;
57
+    rl_attempted_completion_function = (rl_completion_func_t *)NULL;
58
++   bashline_set_event_hook ();
59
+    if (itext)
60
+      {
61
+***************
62
+*** 1033,1036 ****
63
+--- 1037,1041 ----
64
+    rl_attempted_completion_function = old_attempted_completion_function;
65
+    old_attempted_completion_function = (rl_completion_func_t *)NULL;
66
++   bashline_reset_event_hook ();
67
+  
68
+    if (ret == 0)
69
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
70
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
71
+***************
72
+*** 26,30 ****
73
+     looks for to find the patch level (for the sccs version string). */
74
+  
75
+! #define PATCHLEVEL 18
76
+  
77
+  #endif /* _PATCHLEVEL_H_ */
78
+--- 26,30 ----
79
+     looks for to find the patch level (for the sccs version string). */
80
+  
81
+! #define PATCHLEVEL 19
82
+  
83
+  #endif /* _PATCHLEVEL_H_ */
0 84
new file mode 100644
... ...
@@ -0,0 +1,110 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-020
5
+
6
+Bug-Reported-by:	Jared Yanovich <slovichon@gmail.com>
7
+Bug-Reference-ID:	<20140417073654.GB26875@nightderanger.psc.edu>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html
9
+
10
+Bug-Description:
11
+
12
+When PS2 contains a command substitution, here-documents entered in an
13
+interactive shell can sometimes cause a segmentation fault.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/shell.h	2012-12-25 21:11:01.000000000 -0500
18
+--- shell.h	2014-06-03 09:24:28.000000000 -0400
19
+***************
20
+*** 169,173 ****
21
+    int expand_aliases;
22
+    int echo_input_at_read;
23
+!   
24
+  } sh_parser_state_t;
25
+  
26
+--- 169,174 ----
27
+    int expand_aliases;
28
+    int echo_input_at_read;
29
+!   int need_here_doc;
30
+! 
31
+  } sh_parser_state_t;
32
+  
33
+*** ../bash-4.3-patched/parse.y	2014-05-14 09:16:40.000000000 -0400
34
+--- parse.y	2014-04-30 09:27:59.000000000 -0400
35
+***************
36
+*** 2643,2647 ****
37
+  
38
+    r = 0;
39
+!   while (need_here_doc)
40
+      {
41
+        parser_state |= PST_HEREDOC;
42
+--- 2643,2647 ----
43
+  
44
+    r = 0;
45
+!   while (need_here_doc > 0)
46
+      {
47
+        parser_state |= PST_HEREDOC;
48
+***************
49
+*** 6076,6079 ****
50
+--- 6076,6080 ----
51
+    ps->expand_aliases = expand_aliases;
52
+    ps->echo_input_at_read = echo_input_at_read;
53
++   ps->need_here_doc = need_here_doc;
54
+  
55
+    ps->token = token;
56
+***************
57
+*** 6124,6127 ****
58
+--- 6125,6129 ----
59
+    expand_aliases = ps->expand_aliases;
60
+    echo_input_at_read = ps->echo_input_at_read;
61
++   need_here_doc = ps->need_here_doc;
62
+  
63
+    FREE (token);
64
+*** ../bash-4.3-patched/y.tab.c	2014-04-07 11:56:12.000000000 -0400
65
+--- y.tab.c	2014-07-30 09:55:57.000000000 -0400
66
+***************
67
+*** 4955,4959 ****
68
+  
69
+    r = 0;
70
+!   while (need_here_doc)
71
+      {
72
+        parser_state |= PST_HEREDOC;
73
+--- 5151,5155 ----
74
+  
75
+    r = 0;
76
+!   while (need_here_doc > 0)
77
+      {
78
+        parser_state |= PST_HEREDOC;
79
+***************
80
+*** 8388,8391 ****
81
+--- 8584,8588 ----
82
+    ps->expand_aliases = expand_aliases;
83
+    ps->echo_input_at_read = echo_input_at_read;
84
++   ps->need_here_doc = need_here_doc;
85
+  
86
+    ps->token = token;
87
+***************
88
+*** 8436,8439 ****
89
+--- 8633,8637 ----
90
+    expand_aliases = ps->expand_aliases;
91
+    echo_input_at_read = ps->echo_input_at_read;
92
++   need_here_doc = ps->need_here_doc;
93
+  
94
+    FREE (token);
95
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
96
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
97
+***************
98
+*** 26,30 ****
99
+     looks for to find the patch level (for the sccs version string). */
100
+  
101
+! #define PATCHLEVEL 19
102
+  
103
+  #endif /* _PATCHLEVEL_H_ */
104
+--- 26,30 ----
105
+     looks for to find the patch level (for the sccs version string). */
106
+  
107
+! #define PATCHLEVEL 20
108
+  
109
+  #endif /* _PATCHLEVEL_H_ */
0 110
new file mode 100644
... ...
@@ -0,0 +1,52 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-021
5
+
6
+Bug-Reported-by:	Jared Yanovich <slovichon@gmail.com>
7
+Bug-Reference-ID:	<20140625225019.GJ17044@nightderanger.psc.edu>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html
9
+
10
+Bug-Description:
11
+
12
+When the readline `revert-all-at-newline' option is set, pressing newline
13
+when the current line is one retrieved from history results in a double free
14
+and a segmentation fault.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/lib/readline/misc.c	2012-09-01 18:03:11.000000000 -0400
19
+--- lib/readline/misc.c	2014-06-30 13:41:19.000000000 -0400
20
+***************
21
+*** 462,465 ****
22
+--- 462,466 ----
23
+  	  /* Set up rl_line_buffer and other variables from history entry */
24
+  	  rl_replace_from_history (entry, 0);	/* entry->line is now current */
25
++ 	  entry->data = 0;			/* entry->data is now current undo list */
26
+  	  /* Undo all changes to this history entry */
27
+  	  while (rl_undo_list)
28
+***************
29
+*** 469,473 ****
30
+  	  FREE (entry->line);
31
+  	  entry->line = savestring (rl_line_buffer);
32
+- 	  entry->data = 0;
33
+  	}
34
+        entry = previous_history ();
35
+--- 470,473 ----
36
+
37
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
38
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
39
+***************
40
+*** 26,30 ****
41
+     looks for to find the patch level (for the sccs version string). */
42
+  
43
+! #define PATCHLEVEL 20
44
+  
45
+  #endif /* _PATCHLEVEL_H_ */
46
+--- 26,30 ----
47
+     looks for to find the patch level (for the sccs version string). */
48
+  
49
+! #define PATCHLEVEL 21
50
+  
51
+  #endif /* _PATCHLEVEL_H_ */
0 52
new file mode 100644
... ...
@@ -0,0 +1,56 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-022
5
+
6
+Bug-Reported-by:	scorp.dev.null@gmail.com
7
+Bug-Reference-ID:	<E1WxXw8-0007iE-Bi@pcm14>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html
9
+
10
+Bug-Description:
11
+
12
+Using nested pipelines within loops with the `lastpipe' option set can result
13
+in a segmentation fault.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/execute_cmd.c	2014-01-31 10:54:52.000000000 -0500
18
+--- execute_cmd.c	2014-06-19 08:05:49.000000000 -0400
19
+***************
20
+*** 2410,2414 ****
21
+        lstdin = wait_for (lastpid);
22
+  #if defined (JOB_CONTROL)
23
+!       exec_result = job_exit_status (lastpipe_jid);
24
+  #endif
25
+        unfreeze_jobs_list ();
26
+--- 2425,2438 ----
27
+        lstdin = wait_for (lastpid);
28
+  #if defined (JOB_CONTROL)
29
+!       /* If wait_for removes the job from the jobs table, use result of last
30
+! 	 command as pipeline's exit status as usual.  The jobs list can get
31
+! 	 frozen and unfrozen at inconvenient times if there are multiple pipelines
32
+! 	 running simultaneously. */
33
+!       if (INVALID_JOB (lastpipe_jid) == 0)
34
+! 	exec_result = job_exit_status (lastpipe_jid);
35
+!       else if (pipefail_opt)
36
+! 	exec_result = exec_result | lstdin;	/* XXX */
37
+!       /* otherwise we use exec_result */
38
+!         
39
+  #endif
40
+        unfreeze_jobs_list ();
41
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
42
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
43
+***************
44
+*** 26,30 ****
45
+     looks for to find the patch level (for the sccs version string). */
46
+  
47
+! #define PATCHLEVEL 21
48
+  
49
+  #endif /* _PATCHLEVEL_H_ */
50
+--- 26,30 ----
51
+     looks for to find the patch level (for the sccs version string). */
52
+  
53
+! #define PATCHLEVEL 22
54
+  
55
+  #endif /* _PATCHLEVEL_H_ */
0 56
new file mode 100644
... ...
@@ -0,0 +1,104 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-023
5
+
6
+Bug-Reported-by:	Tim Friske <me@timfriske.com>
7
+Bug-Reference-ID:	<CAM1RzOcOR9zzC2i+aeES6LtbHNHoOV+0pZEYPrqxv_QAii-RXA@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html
9
+
10
+Bug-Description:
11
+
12
+Bash does not correctly parse process substitution constructs that contain
13
+unbalanced parentheses as part of the contained command.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/subst.h	2014-01-11 21:02:27.000000000 -0500
18
+--- subst.h	2014-07-20 17:25:01.000000000 -0400
19
+***************
20
+*** 83,87 ****
21
+     Start extracting at (SINDEX) as if we had just seen "<(".
22
+     Make (SINDEX) get the position just after the matching ")". */
23
+! extern char *extract_process_subst __P((char *, char *, int *));
24
+  #endif /* PROCESS_SUBSTITUTION */
25
+  
26
+--- 83,87 ----
27
+     Start extracting at (SINDEX) as if we had just seen "<(".
28
+     Make (SINDEX) get the position just after the matching ")". */
29
+! extern char *extract_process_subst __P((char *, char *, int *, int));
30
+  #endif /* PROCESS_SUBSTITUTION */
31
+  
32
+*** ../bash-4.3-patched/subst.c	2014-05-15 08:26:45.000000000 -0400
33
+--- subst.c	2014-07-20 17:26:44.000000000 -0400
34
+***************
35
+*** 1193,1202 ****
36
+     Make (SINDEX) get the position of the matching ")". */ /*))*/
37
+  char *
38
+! extract_process_subst (string, starter, sindex)
39
+       char *string;
40
+       char *starter;
41
+       int *sindex;
42
+  {
43
+    return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
44
+  }
45
+  #endif /* PROCESS_SUBSTITUTION */
46
+--- 1193,1208 ----
47
+     Make (SINDEX) get the position of the matching ")". */ /*))*/
48
+  char *
49
+! extract_process_subst (string, starter, sindex, xflags)
50
+       char *string;
51
+       char *starter;
52
+       int *sindex;
53
++      int xflags;
54
+  {
55
++ #if 0
56
+    return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND));
57
++ #else
58
++   xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0);
59
++   return (xparse_dolparen (string, string+*sindex, sindex, xflags));
60
++ #endif
61
+  }
62
+  #endif /* PROCESS_SUBSTITUTION */
63
+***************
64
+*** 1786,1790 ****
65
+  	  if (string[si] == '\0')
66
+  	    CQ_RETURN(si);
67
+! 	  temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si);
68
+  	  free (temp);		/* no SX_ALLOC here */
69
+  	  i = si;
70
+--- 1792,1796 ----
71
+  	  if (string[si] == '\0')
72
+  	    CQ_RETURN(si);
73
+! 	  temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0);
74
+  	  free (temp);		/* no SX_ALLOC here */
75
+  	  i = si;
76
+***************
77
+*** 8250,8254 ****
78
+  	      t_index = sindex + 1; /* skip past both '<' and LPAREN */
79
+  
80
+! 	    temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/
81
+  	    sindex = t_index;
82
+  
83
+--- 8256,8260 ----
84
+  	      t_index = sindex + 1; /* skip past both '<' and LPAREN */
85
+  
86
+! 	    temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/
87
+  	    sindex = t_index;
88
+  
89
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
90
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
91
+***************
92
+*** 26,30 ****
93
+     looks for to find the patch level (for the sccs version string). */
94
+  
95
+! #define PATCHLEVEL 22
96
+  
97
+  #endif /* _PATCHLEVEL_H_ */
98
+--- 26,30 ----
99
+     looks for to find the patch level (for the sccs version string). */
100
+  
101
+! #define PATCHLEVEL 23
102
+  
103
+  #endif /* _PATCHLEVEL_H_ */
0 104
new file mode 100644
... ...
@@ -0,0 +1,54 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-024
5
+
6
+Bug-Reported-by:	Corentin Peuvrel <cpeuvrel@pom-monitoring.com>
7
+Bug-Reference-ID:	<53CE9E5D.6050203@pom-monitoring.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html
9
+
10
+Bug-Description:
11
+
12
+Indirect variable references do not work correctly if the reference
13
+variable expands to an array reference using a subscript other than 0
14
+(e.g., foo='bar[1]' ; echo ${!foo}).
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/subst.c	2014-06-03 09:32:44.000000000 -0400
19
+--- subst.c	2014-07-23 09:58:19.000000000 -0400
20
+***************
21
+*** 7375,7379 ****
22
+  
23
+    if (want_indir)
24
+!     tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
25
+    else
26
+      tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
27
+--- 7445,7455 ----
28
+  
29
+    if (want_indir)
30
+!     {
31
+!       tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
32
+!       /* Turn off the W_ARRAYIND flag because there is no way for this function
33
+! 	 to return the index we're supposed to be using. */
34
+!       if (tdesc && tdesc->flags)
35
+! 	tdesc->flags &= ~W_ARRAYIND;
36
+!     }
37
+    else
38
+      tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);
39
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
40
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
41
+***************
42
+*** 26,30 ****
43
+     looks for to find the patch level (for the sccs version string). */
44
+  
45
+! #define PATCHLEVEL 23
46
+  
47
+  #endif /* _PATCHLEVEL_H_ */
48
+--- 26,30 ----
49
+     looks for to find the patch level (for the sccs version string). */
50
+  
51
+! #define PATCHLEVEL 24
52
+  
53
+  #endif /* _PATCHLEVEL_H_ */
0 54
new file mode 100644
... ...
@@ -0,0 +1,123 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-025
5
+
6
+Bug-Reported-by:	Stephane Chazelas <stephane.chazelas@gmail.com>
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:
9
+
10
+Bug-Description:
11
+
12
+Under certain circumstances, bash will execute user code while processing the
13
+environment for exported function definitions.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/builtins/common.h	2013-07-08 16:54:47.000000000 -0400
18
+--- builtins/common.h	2014-09-12 14:25:47.000000000 -0400
19
+***************
20
+*** 34,37 ****
21
+--- 49,54 ----
22
+  #define SEVAL_PARSEONLY	0x020
23
+  #define SEVAL_NOLONGJMP 0x040
24
++ #define SEVAL_FUNCDEF	0x080		/* only allow function definitions */
25
++ #define SEVAL_ONECMD	0x100		/* only allow a single command */
26
+  
27
+  /* Flags for describe_command, shared between type.def and command.def */
28
+*** ../bash-4.3-patched/builtins/evalstring.c	2014-02-11 09:42:10.000000000 -0500
29
+--- builtins/evalstring.c	2014-09-14 14:15:13.000000000 -0400
30
+***************
31
+*** 309,312 ****
32
+--- 313,324 ----
33
+  	      struct fd_bitmap *bitmap;
34
+  
35
++ 	      if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
36
++ 		{
37
++ 		  internal_warning ("%s: ignoring function definition attempt", from_file);
38
++ 		  should_jump_to_top_level = 0;
39
++ 		  last_result = last_command_exit_value = EX_BADUSAGE;
40
++ 		  break;
41
++ 		}
42
++ 
43
+  	      bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
44
+  	      begin_unwind_frame ("pe_dispose");
45
+***************
46
+*** 369,372 ****
47
+--- 381,387 ----
48
+  	      dispose_fd_bitmap (bitmap);
49
+  	      discard_unwind_frame ("pe_dispose");
50
++ 
51
++ 	      if (flags & SEVAL_ONECMD)
52
++ 		break;
53
+  	    }
54
+  	}
55
+*** ../bash-4.3-patched/variables.c	2014-05-15 08:26:50.000000000 -0400
56
+--- variables.c	2014-09-14 14:23:35.000000000 -0400
57
+***************
58
+*** 359,369 ****
59
+  	  strcpy (temp_string + char_index + 1, string);
60
+  
61
+! 	  if (posixly_correct == 0 || legal_identifier (name))
62
+! 	    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST);
63
+! 
64
+! 	  /* Ancient backwards compatibility.  Old versions of bash exported
65
+! 	     functions like name()=() {...} */
66
+! 	  if (name[char_index - 1] == ')' && name[char_index - 2] == '(')
67
+! 	    name[char_index - 2] = '\0';
68
+  
69
+  	  if (temp_var = find_function (name))
70
+--- 364,372 ----
71
+  	  strcpy (temp_string + char_index + 1, string);
72
+  
73
+! 	  /* Don't import function names that are invalid identifiers from the
74
+! 	     environment, though we still allow them to be defined as shell
75
+! 	     variables. */
76
+! 	  if (legal_identifier (name))
77
+! 	    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
78
+  
79
+  	  if (temp_var = find_function (name))
80
+***************
81
+*** 382,389 ****
82
+  	      report_error (_("error importing function definition for `%s'"), name);
83
+  	    }
84
+- 
85
+- 	  /* ( */
86
+- 	  if (name[char_index - 1] == ')' && name[char_index - 2] == '\0')
87
+- 	    name[char_index - 2] = '(';		/* ) */
88
+  	}
89
+  #if defined (ARRAY_VARS)
90
+--- 385,388 ----
91
+*** ../bash-4.3-patched/subst.c	2014-08-11 11:16:35.000000000 -0400
92
+--- subst.c	2014-09-12 15:31:04.000000000 -0400
93
+***************
94
+*** 8048,8052 ****
95
+  	  goto return0;
96
+  	}
97
+!       else if (var = find_variable_last_nameref (temp1))
98
+  	{
99
+  	  temp = nameref_cell (var);
100
+--- 8118,8124 ----
101
+  	  goto return0;
102
+  	}
103
+!       else if (var && (invisible_p (var) || var_isset (var) == 0))
104
+! 	temp = (char *)NULL;
105
+!       else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0)
106
+  	{
107
+  	  temp = nameref_cell (var);
108
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
109
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
110
+***************
111
+*** 26,30 ****
112
+     looks for to find the patch level (for the sccs version string). */
113
+  
114
+! #define PATCHLEVEL 24
115
+  
116
+  #endif /* _PATCHLEVEL_H_ */
117
+--- 26,30 ----
118
+     looks for to find the patch level (for the sccs version string). */
119
+  
120
+! #define PATCHLEVEL 25
121
+  
122
+  #endif /* _PATCHLEVEL_H_ */
0 123
new file mode 100644
... ...
@@ -0,0 +1,60 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-026
5
+
6
+Bug-Reported-by:	Tavis Ormandy <taviso@cmpxchg8b.com>
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:	http://twitter.com/taviso/statuses/514887394294652929
9
+
10
+Bug-Description:
11
+
12
+Under certain circumstances, bash can incorrectly save a lookahead character and
13
+return it on a subsequent call, even when reading a new line.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3.25/parse.y	2014-07-30 10:14:31.000000000 -0400
18
+--- parse.y	2014-09-25 20:20:21.000000000 -0400
19
+***************
20
+*** 2954,2957 ****
21
+--- 2954,2959 ----
22
+    word_desc_to_read = (WORD_DESC *)NULL;
23
+  
24
++   eol_ungetc_lookahead = 0;
25
++ 
26
+    current_token = '\n';		/* XXX */
27
+    last_read_token = '\n';
28
+*** ../bash-4.3.25/y.tab.c	2014-07-30 10:14:32.000000000 -0400
29
+--- y.tab.c	2014-09-25 20:21:48.000000000 -0400
30
+***************
31
+*** 5266,5269 ****
32
+--- 5266,5271 ----
33
+    word_desc_to_read = (WORD_DESC *)NULL;
34
+  
35
++   eol_ungetc_lookahead = 0;
36
++ 
37
+    current_token = '\n';		/* XXX */
38
+    last_read_token = '\n';
39
+***************
40
+*** 8540,8542 ****
41
+  }
42
+  #endif /* HANDLE_MULTIBYTE */
43
+- 
44
+--- 8542,8543 ----
45
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
46
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
47
+***************
48
+*** 26,30 ****
49
+     looks for to find the patch level (for the sccs version string). */
50
+  
51
+! #define PATCHLEVEL 25
52
+  
53
+  #endif /* _PATCHLEVEL_H_ */
54
+--- 26,30 ----
55
+     looks for to find the patch level (for the sccs version string). */
56
+  
57
+! #define PATCHLEVEL 26
58
+  
59
+  #endif /* _PATCHLEVEL_H_ */
0 60
new file mode 100644
... ...
@@ -0,0 +1,221 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-027
5
+
6
+Bug-Reported-by:	Florian Weimer <fweimer@redhat.com>
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:
9
+
10
+Bug-Description:
11
+
12
+This patch changes the encoding bash uses for exported functions to avoid
13
+clashes with shell variables and to avoid depending only on an environment
14
+variable's contents to determine whether or not to interpret it as a shell
15
+function.
16
+
17
+Patch (apply with `patch -p0'):
18
+
19
+*** ../bash-4.3.26/variables.c	2014-09-25 23:02:18.000000000 -0400
20
+--- variables.c	2014-09-27 20:52:04.000000000 -0400
21
+***************
22
+*** 84,87 ****
23
+--- 84,92 ----
24
+  #define ifsname(s)	((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
25
+  
26
++ #define BASHFUNC_PREFIX		"BASH_FUNC_"
27
++ #define BASHFUNC_PREFLEN	10	/* == strlen(BASHFUNC_PREFIX */
28
++ #define BASHFUNC_SUFFIX		"%%"
29
++ #define BASHFUNC_SUFFLEN	2	/* == strlen(BASHFUNC_SUFFIX) */
30
++ 
31
+  extern char **environ;
32
+  
33
+***************
34
+*** 280,284 ****
35
+  static void dispose_temporary_env __P((sh_free_func_t *));     
36
+  
37
+! static inline char *mk_env_string __P((const char *, const char *));
38
+  static char **make_env_array_from_var_list __P((SHELL_VAR **));
39
+  static char **make_var_export_array __P((VAR_CONTEXT *));
40
+--- 285,289 ----
41
+  static void dispose_temporary_env __P((sh_free_func_t *));     
42
+  
43
+! static inline char *mk_env_string __P((const char *, const char *, int));
44
+  static char **make_env_array_from_var_list __P((SHELL_VAR **));
45
+  static char **make_var_export_array __P((VAR_CONTEXT *));
46
+***************
47
+*** 350,369 ****
48
+        /* If exported function, define it now.  Don't import functions from
49
+  	 the environment in privileged mode. */
50
+!       if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4))
51
+  	{
52
+  	  string_length = strlen (string);
53
+! 	  temp_string = (char *)xmalloc (3 + string_length + char_index);
54
+  
55
+! 	  strcpy (temp_string, name);
56
+! 	  temp_string[char_index] = ' ';
57
+! 	  strcpy (temp_string + char_index + 1, string);
58
+  
59
+  	  /* Don't import function names that are invalid identifiers from the
60
+  	     environment, though we still allow them to be defined as shell
61
+  	     variables. */
62
+! 	  if (legal_identifier (name))
63
+! 	    parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
64
+  
65
+! 	  if (temp_var = find_function (name))
66
+  	    {
67
+  	      VSETATTR (temp_var, (att_exported|att_imported));
68
+--- 355,385 ----
69
+        /* If exported function, define it now.  Don't import functions from
70
+  	 the environment in privileged mode. */
71
+!       if (privmode == 0 && read_but_dont_execute == 0 && 
72
+!           STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) &&
73
+!           STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) &&
74
+! 	  STREQN ("() {", string, 4))
75
+  	{
76
++ 	  size_t namelen;
77
++ 	  char *tname;		/* desired imported function name */
78
++ 
79
++ 	  namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN;
80
++ 
81
++ 	  tname = name + BASHFUNC_PREFLEN;	/* start of func name */
82
++ 	  tname[namelen] = '\0';		/* now tname == func name */
83
++ 
84
+  	  string_length = strlen (string);
85
+! 	  temp_string = (char *)xmalloc (namelen + string_length + 2);
86
+  
87
+! 	  memcpy (temp_string, tname, namelen);
88
+! 	  temp_string[namelen] = ' ';
89
+! 	  memcpy (temp_string + namelen + 1, string, string_length + 1);
90
+  
91
+  	  /* Don't import function names that are invalid identifiers from the
92
+  	     environment, though we still allow them to be defined as shell
93
+  	     variables. */
94
+! 	  if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname)))
95
+! 	    parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD);
96
+  
97
+! 	  if (temp_var = find_function (tname))
98
+  	    {
99
+  	      VSETATTR (temp_var, (att_exported|att_imported));
100
+***************
101
+*** 378,383 ****
102
+  		}
103
+  	      last_command_exit_value = 1;
104
+! 	      report_error (_("error importing function definition for `%s'"), name);
105
+  	    }
106
+  	}
107
+  #if defined (ARRAY_VARS)
108
+--- 394,402 ----
109
+  		}
110
+  	      last_command_exit_value = 1;
111
+! 	      report_error (_("error importing function definition for `%s'"), tname);
112
+  	    }
113
++ 
114
++ 	  /* Restore original suffix */
115
++ 	  tname[namelen] = BASHFUNC_SUFFIX[0];
116
+  	}
117
+  #if defined (ARRAY_VARS)
118
+***************
119
+*** 2955,2959 ****
120
+  
121
+    INVALIDATE_EXPORTSTR (var);
122
+!   var->exportstr = mk_env_string (name, value);
123
+  
124
+    array_needs_making = 1;
125
+--- 2974,2978 ----
126
+  
127
+    INVALIDATE_EXPORTSTR (var);
128
+!   var->exportstr = mk_env_string (name, value, 0);
129
+  
130
+    array_needs_making = 1;
131
+***************
132
+*** 3853,3871 ****
133
+  
134
+  static inline char *
135
+! mk_env_string (name, value)
136
+       const char *name, *value;
137
+  {
138
+!   int name_len, value_len;
139
+!   char	*p;
140
+  
141
+    name_len = strlen (name);
142
+    value_len = STRLEN (value);
143
+!   p = (char *)xmalloc (2 + name_len + value_len);
144
+!   strcpy (p, name);
145
+!   p[name_len] = '=';
146
+    if (value && *value)
147
+!     strcpy (p + name_len + 1, value);
148
+    else
149
+!     p[name_len + 1] = '\0';
150
+    return (p);
151
+  }
152
+--- 3872,3911 ----
153
+  
154
+  static inline char *
155
+! mk_env_string (name, value, isfunc)
156
+       const char *name, *value;
157
++      int isfunc;
158
+  {
159
+!   size_t name_len, value_len;
160
+!   char	*p, *q;
161
+  
162
+    name_len = strlen (name);
163
+    value_len = STRLEN (value);
164
+! 
165
+!   /* If we are exporting a shell function, construct the encoded function
166
+!      name. */
167
+!   if (isfunc && value)
168
+!     {
169
+!       p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2);
170
+!       q = p;
171
+!       memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN);
172
+!       q += BASHFUNC_PREFLEN;
173
+!       memcpy (q, name, name_len);
174
+!       q += name_len;
175
+!       memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
176
+!       q += BASHFUNC_SUFFLEN;
177
+!     }
178
+!   else
179
+!     {
180
+!       p = (char *)xmalloc (2 + name_len + value_len);
181
+!       memcpy (p, name, name_len);
182
+!       q = p + name_len;
183
+!     }
184
+! 
185
+!   q[0] = '=';
186
+    if (value && *value)
187
+!     memcpy (q + 1, value, value_len + 1);
188
+    else
189
+!     q[1] = '\0';
190
+! 
191
+    return (p);
192
+  }
193
+***************
194
+*** 3953,3957 ****
195
+  	     using the cached exportstr... */
196
+  	  list[list_index] = USE_EXPORTSTR ? savestring (value)
197
+! 					   : mk_env_string (var->name, value);
198
+  
199
+  	  if (USE_EXPORTSTR == 0)
200
+--- 3993,3997 ----
201
+  	     using the cached exportstr... */
202
+  	  list[list_index] = USE_EXPORTSTR ? savestring (value)
203
+! 					   : mk_env_string (var->name, value, function_p (var));
204
+  
205
+  	  if (USE_EXPORTSTR == 0)
206
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
207
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
208
+***************
209
+*** 26,30 ****
210
+     looks for to find the patch level (for the sccs version string). */
211
+  
212
+! #define PATCHLEVEL 26
213
+  
214
+  #endif /* _PATCHLEVEL_H_ */
215
+--- 26,30 ----
216
+     looks for to find the patch level (for the sccs version string). */
217
+  
218
+! #define PATCHLEVEL 27
219
+  
220
+  #endif /* _PATCHLEVEL_H_ */
0 221
new file mode 100644
... ...
@@ -0,0 +1,2265 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-028
5
+
6
+Bug-Reported-by:	Florian Weimer <fweimer@redhat.com>
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:
9
+
10
+Bug-Description:
11
+
12
+There are two local buffer overflows in parse.y that can cause the shell
13
+to dump core when given many here-documents attached to a single command
14
+or many nested loops.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/parse.y	2014-09-25 23:02:35.000000000 -0400
19
+--- parse.y	2014-09-29 16:47:03.000000000 -0400
20
+***************
21
+*** 169,172 ****
22
+--- 169,175 ----
23
+  static int reserved_word_acceptable __P((int));
24
+  static int yylex __P((void));
25
++ 
26
++ static void push_heredoc __P((REDIRECT *));
27
++ static char *mk_alexpansion __P((char *));
28
+  static int alias_expand_token __P((char *));
29
+  static int time_command_acceptable __P((void));
30
+***************
31
+*** 266,270 ****
32
+  /* Variables to manage the task of reading here documents, because we need to
33
+     defer the reading until after a complete command has been collected. */
34
+! static REDIRECT *redir_stack[10];
35
+  int need_here_doc;
36
+  
37
+--- 269,275 ----
38
+  /* Variables to manage the task of reading here documents, because we need to
39
+     defer the reading until after a complete command has been collected. */
40
+! #define HEREDOC_MAX 16
41
+! 
42
+! static REDIRECT *redir_stack[HEREDOC_MAX];
43
+  int need_here_doc;
44
+  
45
+***************
46
+*** 308,312 ****
47
+     index is decremented after a case, select, or for command is parsed. */
48
+  #define MAX_CASE_NEST	128
49
+! static int word_lineno[MAX_CASE_NEST];
50
+  static int word_top = -1;
51
+  
52
+--- 313,317 ----
53
+     index is decremented after a case, select, or for command is parsed. */
54
+  #define MAX_CASE_NEST	128
55
+! static int word_lineno[MAX_CASE_NEST+1];
56
+  static int word_top = -1;
57
+  
58
+***************
59
+*** 521,525 ****
60
+  			  redir.filename = $2;
61
+  			  $$ = make_redirection (source, r_reading_until, redir, 0);
62
+! 			  redir_stack[need_here_doc++] = $$;
63
+  			}
64
+  	|	NUMBER LESS_LESS WORD
65
+--- 526,530 ----
66
+  			  redir.filename = $2;
67
+  			  $$ = make_redirection (source, r_reading_until, redir, 0);
68
+! 			  push_heredoc ($$);
69
+  			}
70
+  	|	NUMBER LESS_LESS WORD
71
+***************
72
+*** 528,532 ****
73
+  			  redir.filename = $3;
74
+  			  $$ = make_redirection (source, r_reading_until, redir, 0);
75
+! 			  redir_stack[need_here_doc++] = $$;
76
+  			}
77
+  	|	REDIR_WORD LESS_LESS WORD
78
+--- 533,537 ----
79
+  			  redir.filename = $3;
80
+  			  $$ = make_redirection (source, r_reading_until, redir, 0);
81
+! 			  push_heredoc ($$);
82
+  			}
83
+  	|	REDIR_WORD LESS_LESS WORD
84
+***************
85
+*** 535,539 ****
86
+  			  redir.filename = $3;
87
+  			  $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
88
+! 			  redir_stack[need_here_doc++] = $$;
89
+  			}
90
+  	|	LESS_LESS_MINUS WORD
91
+--- 540,544 ----
92
+  			  redir.filename = $3;
93
+  			  $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
94
+! 			  push_heredoc ($$);
95
+  			}
96
+  	|	LESS_LESS_MINUS WORD
97
+***************
98
+*** 542,546 ****
99
+  			  redir.filename = $2;
100
+  			  $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
101
+! 			  redir_stack[need_here_doc++] = $$;
102
+  			}
103
+  	|	NUMBER LESS_LESS_MINUS WORD
104
+--- 547,551 ----
105
+  			  redir.filename = $2;
106
+  			  $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
107
+! 			  push_heredoc ($$);
108
+  			}
109
+  	|	NUMBER LESS_LESS_MINUS WORD
110
+***************
111
+*** 549,553 ****
112
+  			  redir.filename = $3;
113
+  			  $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
114
+! 			  redir_stack[need_here_doc++] = $$;
115
+  			}
116
+  	|	REDIR_WORD  LESS_LESS_MINUS WORD
117
+--- 554,558 ----
118
+  			  redir.filename = $3;
119
+  			  $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
120
+! 			  push_heredoc ($$);
121
+  			}
122
+  	|	REDIR_WORD  LESS_LESS_MINUS WORD
123
+***************
124
+*** 556,560 ****
125
+  			  redir.filename = $3;
126
+  			  $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
127
+! 			  redir_stack[need_here_doc++] = $$;
128
+  			}
129
+  	|	LESS_LESS_LESS WORD
130
+--- 561,565 ----
131
+  			  redir.filename = $3;
132
+  			  $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
133
+! 			  push_heredoc ($$);
134
+  			}
135
+  	|	LESS_LESS_LESS WORD
136
+***************
137
+*** 2637,2640 ****
138
+--- 2642,2660 ----
139
+  static int esacs_needed_count;
140
+  
141
++ static void
142
++ push_heredoc (r)
143
++      REDIRECT *r;
144
++ {
145
++   if (need_here_doc >= HEREDOC_MAX)
146
++     {
147
++       last_command_exit_value = EX_BADUSAGE;
148
++       need_here_doc = 0;
149
++       report_syntax_error (_("maximum here-document count exceeded"));
150
++       reset_parser ();
151
++       exit_shell (last_command_exit_value);
152
++     }
153
++   redir_stack[need_here_doc++] = r;
154
++ }
155
++ 
156
+  void
157
+  gather_here_documents ()
158
+*** ../bash-4.3.27/y.tab.c	2014-10-01 11:38:24.000000000 -0400
159
+--- y.tab.c	2014-10-01 12:46:11.000000000 -0400
160
+***************
161
+*** 169,173 ****
162
+  
163
+  /* Copy the first part of user declarations.  */
164
+! #line 21 "/usr/homes/chet/src/bash/src/parse.y"
165
+  
166
+  #include "config.h"
167
+--- 169,173 ----
168
+  
169
+  /* Copy the first part of user declarations.  */
170
+! #line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
171
+  
172
+  #include "config.h"
173
+***************
174
+*** 320,323 ****
175
+--- 320,326 ----
176
+  static int reserved_word_acceptable __P((int));
177
+  static int yylex __P((void));
178
++ 
179
++ static void push_heredoc __P((REDIRECT *));
180
++ static char *mk_alexpansion __P((char *));
181
+  static int alias_expand_token __P((char *));
182
+  static int time_command_acceptable __P((void));
183
+***************
184
+*** 417,421 ****
185
+  /* Variables to manage the task of reading here documents, because we need to
186
+     defer the reading until after a complete command has been collected. */
187
+! static REDIRECT *redir_stack[10];
188
+  int need_here_doc;
189
+  
190
+--- 420,426 ----
191
+  /* Variables to manage the task of reading here documents, because we need to
192
+     defer the reading until after a complete command has been collected. */
193
+! #define HEREDOC_MAX 16
194
+! 
195
+! static REDIRECT *redir_stack[HEREDOC_MAX];
196
+  int need_here_doc;
197
+  
198
+***************
199
+*** 459,463 ****
200
+     index is decremented after a case, select, or for command is parsed. */
201
+  #define MAX_CASE_NEST	128
202
+! static int word_lineno[MAX_CASE_NEST];
203
+  static int word_top = -1;
204
+  
205
+--- 464,468 ----
206
+     index is decremented after a case, select, or for command is parsed. */
207
+  #define MAX_CASE_NEST	128
208
+! static int word_lineno[MAX_CASE_NEST+1];
209
+  static int word_top = -1;
210
+  
211
+***************
212
+*** 493,497 ****
213
+  #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
214
+  typedef union YYSTYPE
215
+! #line 324 "/usr/homes/chet/src/bash/src/parse.y"
216
+  {
217
+    WORD_DESC *word;		/* the word that we read. */
218
+--- 498,502 ----
219
+  #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
220
+  typedef union YYSTYPE
221
+! #line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
222
+  {
223
+    WORD_DESC *word;		/* the word that we read. */
224
+***************
225
+*** 504,508 ****
226
+  }
227
+  /* Line 193 of yacc.c.  */
228
+! #line 507 "y.tab.c"
229
+  	YYSTYPE;
230
+  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
231
+--- 509,513 ----
232
+  }
233
+  /* Line 193 of yacc.c.  */
234
+! #line 512 "y.tab.c"
235
+  	YYSTYPE;
236
+  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
237
+***************
238
+*** 517,521 ****
239
+  
240
+  /* Line 216 of yacc.c.  */
241
+! #line 520 "y.tab.c"
242
+  
243
+  #ifdef short
244
+--- 522,526 ----
245
+  
246
+  /* Line 216 of yacc.c.  */
247
+! #line 525 "y.tab.c"
248
+  
249
+  #ifdef short
250
+***************
251
+*** 887,907 ****
252
+  static const yytype_uint16 yyrline[] =
253
+  {
254
+!        0,   377,   377,   388,   397,   412,   422,   424,   428,   434,
255
+!      440,   446,   452,   458,   464,   470,   476,   482,   488,   494,
256
+!      500,   506,   512,   518,   525,   532,   539,   546,   553,   560,
257
+!      566,   572,   578,   584,   590,   596,   602,   608,   614,   620,
258
+!      626,   632,   638,   644,   650,   656,   662,   668,   674,   680,
259
+!      686,   692,   700,   702,   704,   708,   712,   723,   725,   729,
260
+!      731,   733,   749,   751,   755,   757,   759,   761,   763,   765,
261
+!      767,   769,   771,   773,   775,   779,   784,   789,   794,   799,
262
+!      804,   809,   814,   821,   826,   831,   836,   843,   848,   853,
263
+!      858,   863,   868,   875,   880,   885,   892,   895,   898,   902,
264
+!      904,   935,   942,   947,   964,   969,   986,   993,   995,   997,
265
+!     1002,  1006,  1010,  1014,  1016,  1018,  1022,  1023,  1027,  1029,
266
+!     1031,  1033,  1037,  1039,  1041,  1043,  1045,  1047,  1051,  1053,
267
+!     1062,  1070,  1071,  1077,  1078,  1085,  1089,  1091,  1093,  1100,
268
+!     1102,  1104,  1108,  1109,  1112,  1114,  1116,  1120,  1121,  1130,
269
+!     1143,  1159,  1174,  1176,  1178,  1185,  1188,  1192,  1194,  1200,
270
+!     1206,  1223,  1243,  1245,  1268,  1272,  1274,  1276
271
+  };
272
+  #endif
273
+--- 892,912 ----
274
+  static const yytype_uint16 yyrline[] =
275
+  {
276
+!        0,   382,   382,   393,   402,   417,   427,   429,   433,   439,
277
+!      445,   451,   457,   463,   469,   475,   481,   487,   493,   499,
278
+!      505,   511,   517,   523,   530,   537,   544,   551,   558,   565,
279
+!      571,   577,   583,   589,   595,   601,   607,   613,   619,   625,
280
+!      631,   637,   643,   649,   655,   661,   667,   673,   679,   685,
281
+!      691,   697,   705,   707,   709,   713,   717,   728,   730,   734,
282
+!      736,   738,   754,   756,   760,   762,   764,   766,   768,   770,
283
+!      772,   774,   776,   778,   780,   784,   789,   794,   799,   804,
284
+!      809,   814,   819,   826,   831,   836,   841,   848,   853,   858,
285
+!      863,   868,   873,   880,   885,   890,   897,   900,   903,   907,
286
+!      909,   940,   947,   952,   969,   974,   991,   998,  1000,  1002,
287
+!     1007,  1011,  1015,  1019,  1021,  1023,  1027,  1028,  1032,  1034,
288
+!     1036,  1038,  1042,  1044,  1046,  1048,  1050,  1052,  1056,  1058,
289
+!     1067,  1075,  1076,  1082,  1083,  1090,  1094,  1096,  1098,  1105,
290
+!     1107,  1109,  1113,  1114,  1117,  1119,  1121,  1125,  1126,  1135,
291
+!     1148,  1164,  1179,  1181,  1183,  1190,  1193,  1197,  1199,  1205,
292
+!     1211,  1228,  1248,  1250,  1273,  1277,  1279,  1281
293
+  };
294
+  #endif
295
+***************
296
+*** 2094,2098 ****
297
+      {
298
+          case 2:
299
+! #line 378 "/usr/homes/chet/src/bash/src/parse.y"
300
+      {
301
+  			  /* Case of regular command.  Discard the error
302
+--- 2099,2103 ----
303
+      {
304
+          case 2:
305
+! #line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
306
+      {
307
+  			  /* Case of regular command.  Discard the error
308
+***************
309
+*** 2108,2112 ****
310
+  
311
+    case 3:
312
+! #line 389 "/usr/homes/chet/src/bash/src/parse.y"
313
+      {
314
+  			  /* Case of regular command, but not a very
315
+--- 2113,2117 ----
316
+  
317
+    case 3:
318
+! #line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
319
+      {
320
+  			  /* Case of regular command, but not a very
321
+***************
322
+*** 2120,2124 ****
323
+  
324
+    case 4:
325
+! #line 398 "/usr/homes/chet/src/bash/src/parse.y"
326
+      {
327
+  			  /* Error during parsing.  Return NULL command. */
328
+--- 2125,2129 ----
329
+  
330
+    case 4:
331
+! #line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
332
+      {
333
+  			  /* Error during parsing.  Return NULL command. */
334
+***************
335
+*** 2138,2142 ****
336
+  
337
+    case 5:
338
+! #line 413 "/usr/homes/chet/src/bash/src/parse.y"
339
+      {
340
+  			  /* Case of EOF seen by itself.  Do ignoreeof or
341
+--- 2143,2147 ----
342
+  
343
+    case 5:
344
+! #line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
345
+      {
346
+  			  /* Case of EOF seen by itself.  Do ignoreeof or
347
+***************
348
+*** 2149,2163 ****
349
+  
350
+    case 6:
351
+! #line 423 "/usr/homes/chet/src/bash/src/parse.y"
352
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
353
+      break;
354
+  
355
+    case 7:
356
+! #line 425 "/usr/homes/chet/src/bash/src/parse.y"
357
+      { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
358
+      break;
359
+  
360
+    case 8:
361
+! #line 429 "/usr/homes/chet/src/bash/src/parse.y"
362
+      {
363
+  			  source.dest = 1;
364
+--- 2154,2168 ----
365
+  
366
+    case 6:
367
+! #line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
368
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
369
+      break;
370
+  
371
+    case 7:
372
+! #line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
373
+      { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
374
+      break;
375
+  
376
+    case 8:
377
+! #line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
378
+      {
379
+  			  source.dest = 1;
380
+***************
381
+*** 2168,2172 ****
382
+  
383
+    case 9:
384
+! #line 435 "/usr/homes/chet/src/bash/src/parse.y"
385
+      {
386
+  			  source.dest = 0;
387
+--- 2173,2177 ----
388
+  
389
+    case 9:
390
+! #line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
391
+      {
392
+  			  source.dest = 0;
393
+***************
394
+*** 2177,2181 ****
395
+  
396
+    case 10:
397
+! #line 441 "/usr/homes/chet/src/bash/src/parse.y"
398
+      {
399
+  			  source.dest = (yyvsp[(1) - (3)].number);
400
+--- 2182,2186 ----
401
+  
402
+    case 10:
403
+! #line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
404
+      {
405
+  			  source.dest = (yyvsp[(1) - (3)].number);
406
+***************
407
+*** 2186,2190 ****
408
+  
409
+    case 11:
410
+! #line 447 "/usr/homes/chet/src/bash/src/parse.y"
411
+      {
412
+  			  source.dest = (yyvsp[(1) - (3)].number);
413
+--- 2191,2195 ----
414
+  
415
+    case 11:
416
+! #line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
417
+      {
418
+  			  source.dest = (yyvsp[(1) - (3)].number);
419
+***************
420
+*** 2195,2199 ****
421
+  
422
+    case 12:
423
+! #line 453 "/usr/homes/chet/src/bash/src/parse.y"
424
+      {
425
+  			  source.filename = (yyvsp[(1) - (3)].word);
426
+--- 2200,2204 ----
427
+  
428
+    case 12:
429
+! #line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
430
+      {
431
+  			  source.filename = (yyvsp[(1) - (3)].word);
432
+***************
433
+*** 2204,2208 ****
434
+  
435
+    case 13:
436
+! #line 459 "/usr/homes/chet/src/bash/src/parse.y"
437
+      {
438
+  			  source.filename = (yyvsp[(1) - (3)].word);
439
+--- 2209,2213 ----
440
+  
441
+    case 13:
442
+! #line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
443
+      {
444
+  			  source.filename = (yyvsp[(1) - (3)].word);
445
+***************
446
+*** 2213,2217 ****
447
+  
448
+    case 14:
449
+! #line 465 "/usr/homes/chet/src/bash/src/parse.y"
450
+      {
451
+  			  source.dest = 1;
452
+--- 2218,2222 ----
453
+  
454
+    case 14:
455
+! #line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
456
+      {
457
+  			  source.dest = 1;
458
+***************
459
+*** 2222,2226 ****
460
+  
461
+    case 15:
462
+! #line 471 "/usr/homes/chet/src/bash/src/parse.y"
463
+      {
464
+  			  source.dest = (yyvsp[(1) - (3)].number);
465
+--- 2227,2231 ----
466
+  
467
+    case 15:
468
+! #line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
469
+      {
470
+  			  source.dest = (yyvsp[(1) - (3)].number);
471
+***************
472
+*** 2231,2235 ****
473
+  
474
+    case 16:
475
+! #line 477 "/usr/homes/chet/src/bash/src/parse.y"
476
+      {
477
+  			  source.filename = (yyvsp[(1) - (3)].word);
478
+--- 2236,2240 ----
479
+  
480
+    case 16:
481
+! #line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
482
+      {
483
+  			  source.filename = (yyvsp[(1) - (3)].word);
484
+***************
485
+*** 2240,2244 ****
486
+  
487
+    case 17:
488
+! #line 483 "/usr/homes/chet/src/bash/src/parse.y"
489
+      {
490
+  			  source.dest = 1;
491
+--- 2245,2249 ----
492
+  
493
+    case 17:
494
+! #line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
495
+      {
496
+  			  source.dest = 1;
497
+***************
498
+*** 2249,2253 ****
499
+  
500
+    case 18:
501
+! #line 489 "/usr/homes/chet/src/bash/src/parse.y"
502
+      {
503
+  			  source.dest = (yyvsp[(1) - (3)].number);
504
+--- 2254,2258 ----
505
+  
506
+    case 18:
507
+! #line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
508
+      {
509
+  			  source.dest = (yyvsp[(1) - (3)].number);
510
+***************
511
+*** 2258,2262 ****
512
+  
513
+    case 19:
514
+! #line 495 "/usr/homes/chet/src/bash/src/parse.y"
515
+      {
516
+  			  source.filename = (yyvsp[(1) - (3)].word);
517
+--- 2263,2267 ----
518
+  
519
+    case 19:
520
+! #line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
521
+      {
522
+  			  source.filename = (yyvsp[(1) - (3)].word);
523
+***************
524
+*** 2267,2271 ****
525
+  
526
+    case 20:
527
+! #line 501 "/usr/homes/chet/src/bash/src/parse.y"
528
+      {
529
+  			  source.dest = 0;
530
+--- 2272,2276 ----
531
+  
532
+    case 20:
533
+! #line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
534
+      {
535
+  			  source.dest = 0;
536
+***************
537
+*** 2276,2280 ****
538
+  
539
+    case 21:
540
+! #line 507 "/usr/homes/chet/src/bash/src/parse.y"
541
+      {
542
+  			  source.dest = (yyvsp[(1) - (3)].number);
543
+--- 2281,2285 ----
544
+  
545
+    case 21:
546
+! #line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
547
+      {
548
+  			  source.dest = (yyvsp[(1) - (3)].number);
549
+***************
550
+*** 2285,2289 ****
551
+  
552
+    case 22:
553
+! #line 513 "/usr/homes/chet/src/bash/src/parse.y"
554
+      {
555
+  			  source.filename = (yyvsp[(1) - (3)].word);
556
+--- 2290,2294 ----
557
+  
558
+    case 22:
559
+! #line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
560
+      {
561
+  			  source.filename = (yyvsp[(1) - (3)].word);
562
+***************
563
+*** 2294,2358 ****
564
+  
565
+    case 23:
566
+! #line 519 "/usr/homes/chet/src/bash/src/parse.y"
567
+      {
568
+  			  source.dest = 0;
569
+  			  redir.filename = (yyvsp[(2) - (2)].word);
570
+  			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
571
+! 			  redir_stack[need_here_doc++] = (yyval.redirect);
572
+  			}
573
+      break;
574
+  
575
+    case 24:
576
+! #line 526 "/usr/homes/chet/src/bash/src/parse.y"
577
+      {
578
+  			  source.dest = (yyvsp[(1) - (3)].number);
579
+  			  redir.filename = (yyvsp[(3) - (3)].word);
580
+  			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
581
+! 			  redir_stack[need_here_doc++] = (yyval.redirect);
582
+  			}
583
+      break;
584
+  
585
+    case 25:
586
+! #line 533 "/usr/homes/chet/src/bash/src/parse.y"
587
+      {
588
+  			  source.filename = (yyvsp[(1) - (3)].word);
589
+  			  redir.filename = (yyvsp[(3) - (3)].word);
590
+  			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
591
+! 			  redir_stack[need_here_doc++] = (yyval.redirect);
592
+  			}
593
+      break;
594
+  
595
+    case 26:
596
+! #line 540 "/usr/homes/chet/src/bash/src/parse.y"
597
+      {
598
+  			  source.dest = 0;
599
+  			  redir.filename = (yyvsp[(2) - (2)].word);
600
+  			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
601
+! 			  redir_stack[need_here_doc++] = (yyval.redirect);
602
+  			}
603
+      break;
604
+  
605
+    case 27:
606
+! #line 547 "/usr/homes/chet/src/bash/src/parse.y"
607
+      {
608
+  			  source.dest = (yyvsp[(1) - (3)].number);
609
+  			  redir.filename = (yyvsp[(3) - (3)].word);
610
+  			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
611
+! 			  redir_stack[need_here_doc++] = (yyval.redirect);
612
+  			}
613
+      break;
614
+  
615
+    case 28:
616
+! #line 554 "/usr/homes/chet/src/bash/src/parse.y"
617
+      {
618
+  			  source.filename = (yyvsp[(1) - (3)].word);
619
+  			  redir.filename = (yyvsp[(3) - (3)].word);
620
+  			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
621
+! 			  redir_stack[need_here_doc++] = (yyval.redirect);
622
+  			}
623
+      break;
624
+  
625
+    case 29:
626
+! #line 561 "/usr/homes/chet/src/bash/src/parse.y"
627
+      {
628
+  			  source.dest = 0;
629
+--- 2299,2363 ----
630
+  
631
+    case 23:
632
+! #line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
633
+      {
634
+  			  source.dest = 0;
635
+  			  redir.filename = (yyvsp[(2) - (2)].word);
636
+  			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
637
+! 			  push_heredoc ((yyval.redirect));
638
+  			}
639
+      break;
640
+  
641
+    case 24:
642
+! #line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
643
+      {
644
+  			  source.dest = (yyvsp[(1) - (3)].number);
645
+  			  redir.filename = (yyvsp[(3) - (3)].word);
646
+  			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
647
+! 			  push_heredoc ((yyval.redirect));
648
+  			}
649
+      break;
650
+  
651
+    case 25:
652
+! #line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
653
+      {
654
+  			  source.filename = (yyvsp[(1) - (3)].word);
655
+  			  redir.filename = (yyvsp[(3) - (3)].word);
656
+  			  (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
657
+! 			  push_heredoc ((yyval.redirect));
658
+  			}
659
+      break;
660
+  
661
+    case 26:
662
+! #line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
663
+      {
664
+  			  source.dest = 0;
665
+  			  redir.filename = (yyvsp[(2) - (2)].word);
666
+  			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
667
+! 			  push_heredoc ((yyval.redirect));
668
+  			}
669
+      break;
670
+  
671
+    case 27:
672
+! #line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
673
+      {
674
+  			  source.dest = (yyvsp[(1) - (3)].number);
675
+  			  redir.filename = (yyvsp[(3) - (3)].word);
676
+  			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
677
+! 			  push_heredoc ((yyval.redirect));
678
+  			}
679
+      break;
680
+  
681
+    case 28:
682
+! #line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
683
+      {
684
+  			  source.filename = (yyvsp[(1) - (3)].word);
685
+  			  redir.filename = (yyvsp[(3) - (3)].word);
686
+  			  (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
687
+! 			  push_heredoc ((yyval.redirect));
688
+  			}
689
+      break;
690
+  
691
+    case 29:
692
+! #line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
693
+      {
694
+  			  source.dest = 0;
695
+***************
696
+*** 2363,2367 ****
697
+  
698
+    case 30:
699
+! #line 567 "/usr/homes/chet/src/bash/src/parse.y"
700
+      {
701
+  			  source.dest = (yyvsp[(1) - (3)].number);
702
+--- 2368,2372 ----
703
+  
704
+    case 30:
705
+! #line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
706
+      {
707
+  			  source.dest = (yyvsp[(1) - (3)].number);
708
+***************
709
+*** 2372,2376 ****
710
+  
711
+    case 31:
712
+! #line 573 "/usr/homes/chet/src/bash/src/parse.y"
713
+      {
714
+  			  source.filename = (yyvsp[(1) - (3)].word);
715
+--- 2377,2381 ----
716
+  
717
+    case 31:
718
+! #line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
719
+      {
720
+  			  source.filename = (yyvsp[(1) - (3)].word);
721
+***************
722
+*** 2381,2385 ****
723
+  
724
+    case 32:
725
+! #line 579 "/usr/homes/chet/src/bash/src/parse.y"
726
+      {
727
+  			  source.dest = 0;
728
+--- 2386,2390 ----
729
+  
730
+    case 32:
731
+! #line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
732
+      {
733
+  			  source.dest = 0;
734
+***************
735
+*** 2390,2394 ****
736
+  
737
+    case 33:
738
+! #line 585 "/usr/homes/chet/src/bash/src/parse.y"
739
+      {
740
+  			  source.dest = (yyvsp[(1) - (3)].number);
741
+--- 2395,2399 ----
742
+  
743
+    case 33:
744
+! #line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
745
+      {
746
+  			  source.dest = (yyvsp[(1) - (3)].number);
747
+***************
748
+*** 2399,2403 ****
749
+  
750
+    case 34:
751
+! #line 591 "/usr/homes/chet/src/bash/src/parse.y"
752
+      {
753
+  			  source.filename = (yyvsp[(1) - (3)].word);
754
+--- 2404,2408 ----
755
+  
756
+    case 34:
757
+! #line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
758
+      {
759
+  			  source.filename = (yyvsp[(1) - (3)].word);
760
+***************
761
+*** 2408,2412 ****
762
+  
763
+    case 35:
764
+! #line 597 "/usr/homes/chet/src/bash/src/parse.y"
765
+      {
766
+  			  source.dest = 1;
767
+--- 2413,2417 ----
768
+  
769
+    case 35:
770
+! #line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
771
+      {
772
+  			  source.dest = 1;
773
+***************
774
+*** 2417,2421 ****
775
+  
776
+    case 36:
777
+! #line 603 "/usr/homes/chet/src/bash/src/parse.y"
778
+      {
779
+  			  source.dest = (yyvsp[(1) - (3)].number);
780
+--- 2422,2426 ----
781
+  
782
+    case 36:
783
+! #line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
784
+      {
785
+  			  source.dest = (yyvsp[(1) - (3)].number);
786
+***************
787
+*** 2426,2430 ****
788
+  
789
+    case 37:
790
+! #line 609 "/usr/homes/chet/src/bash/src/parse.y"
791
+      {
792
+  			  source.filename = (yyvsp[(1) - (3)].word);
793
+--- 2431,2435 ----
794
+  
795
+    case 37:
796
+! #line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
797
+      {
798
+  			  source.filename = (yyvsp[(1) - (3)].word);
799
+***************
800
+*** 2435,2439 ****
801
+  
802
+    case 38:
803
+! #line 615 "/usr/homes/chet/src/bash/src/parse.y"
804
+      {
805
+  			  source.dest = 0;
806
+--- 2440,2444 ----
807
+  
808
+    case 38:
809
+! #line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
810
+      {
811
+  			  source.dest = 0;
812
+***************
813
+*** 2444,2448 ****
814
+  
815
+    case 39:
816
+! #line 621 "/usr/homes/chet/src/bash/src/parse.y"
817
+      {
818
+  			  source.dest = (yyvsp[(1) - (3)].number);
819
+--- 2449,2453 ----
820
+  
821
+    case 39:
822
+! #line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
823
+      {
824
+  			  source.dest = (yyvsp[(1) - (3)].number);
825
+***************
826
+*** 2453,2457 ****
827
+  
828
+    case 40:
829
+! #line 627 "/usr/homes/chet/src/bash/src/parse.y"
830
+      {
831
+  			  source.filename = (yyvsp[(1) - (3)].word);
832
+--- 2458,2462 ----
833
+  
834
+    case 40:
835
+! #line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
836
+      {
837
+  			  source.filename = (yyvsp[(1) - (3)].word);
838
+***************
839
+*** 2462,2466 ****
840
+  
841
+    case 41:
842
+! #line 633 "/usr/homes/chet/src/bash/src/parse.y"
843
+      {
844
+  			  source.dest = 1;
845
+--- 2467,2471 ----
846
+  
847
+    case 41:
848
+! #line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
849
+      {
850
+  			  source.dest = 1;
851
+***************
852
+*** 2471,2475 ****
853
+  
854
+    case 42:
855
+! #line 639 "/usr/homes/chet/src/bash/src/parse.y"
856
+      {
857
+  			  source.dest = (yyvsp[(1) - (3)].number);
858
+--- 2476,2480 ----
859
+  
860
+    case 42:
861
+! #line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
862
+      {
863
+  			  source.dest = (yyvsp[(1) - (3)].number);
864
+***************
865
+*** 2480,2484 ****
866
+  
867
+    case 43:
868
+! #line 645 "/usr/homes/chet/src/bash/src/parse.y"
869
+      {
870
+  			  source.filename = (yyvsp[(1) - (3)].word);
871
+--- 2485,2489 ----
872
+  
873
+    case 43:
874
+! #line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
875
+      {
876
+  			  source.filename = (yyvsp[(1) - (3)].word);
877
+***************
878
+*** 2489,2493 ****
879
+  
880
+    case 44:
881
+! #line 651 "/usr/homes/chet/src/bash/src/parse.y"
882
+      {
883
+  			  source.dest = 1;
884
+--- 2494,2498 ----
885
+  
886
+    case 44:
887
+! #line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
888
+      {
889
+  			  source.dest = 1;
890
+***************
891
+*** 2498,2502 ****
892
+  
893
+    case 45:
894
+! #line 657 "/usr/homes/chet/src/bash/src/parse.y"
895
+      {
896
+  			  source.dest = (yyvsp[(1) - (3)].number);
897
+--- 2503,2507 ----
898
+  
899
+    case 45:
900
+! #line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
901
+      {
902
+  			  source.dest = (yyvsp[(1) - (3)].number);
903
+***************
904
+*** 2507,2511 ****
905
+  
906
+    case 46:
907
+! #line 663 "/usr/homes/chet/src/bash/src/parse.y"
908
+      {
909
+  			  source.filename = (yyvsp[(1) - (3)].word);
910
+--- 2512,2516 ----
911
+  
912
+    case 46:
913
+! #line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
914
+      {
915
+  			  source.filename = (yyvsp[(1) - (3)].word);
916
+***************
917
+*** 2516,2520 ****
918
+  
919
+    case 47:
920
+! #line 669 "/usr/homes/chet/src/bash/src/parse.y"
921
+      {
922
+  			  source.dest = 0;
923
+--- 2521,2525 ----
924
+  
925
+    case 47:
926
+! #line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
927
+      {
928
+  			  source.dest = 0;
929
+***************
930
+*** 2525,2529 ****
931
+  
932
+    case 48:
933
+! #line 675 "/usr/homes/chet/src/bash/src/parse.y"
934
+      {
935
+  			  source.dest = (yyvsp[(1) - (3)].number);
936
+--- 2530,2534 ----
937
+  
938
+    case 48:
939
+! #line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
940
+      {
941
+  			  source.dest = (yyvsp[(1) - (3)].number);
942
+***************
943
+*** 2534,2538 ****
944
+  
945
+    case 49:
946
+! #line 681 "/usr/homes/chet/src/bash/src/parse.y"
947
+      {
948
+  			  source.filename = (yyvsp[(1) - (3)].word);
949
+--- 2539,2543 ----
950
+  
951
+    case 49:
952
+! #line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
953
+      {
954
+  			  source.filename = (yyvsp[(1) - (3)].word);
955
+***************
956
+*** 2543,2547 ****
957
+  
958
+    case 50:
959
+! #line 687 "/usr/homes/chet/src/bash/src/parse.y"
960
+      {
961
+  			  source.dest = 1;
962
+--- 2548,2552 ----
963
+  
964
+    case 50:
965
+! #line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
966
+      {
967
+  			  source.dest = 1;
968
+***************
969
+*** 2552,2556 ****
970
+  
971
+    case 51:
972
+! #line 693 "/usr/homes/chet/src/bash/src/parse.y"
973
+      {
974
+  			  source.dest = 1;
975
+--- 2557,2561 ----
976
+  
977
+    case 51:
978
+! #line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
979
+      {
980
+  			  source.dest = 1;
981
+***************
982
+*** 2561,2580 ****
983
+  
984
+    case 52:
985
+! #line 701 "/usr/homes/chet/src/bash/src/parse.y"
986
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
987
+      break;
988
+  
989
+    case 53:
990
+! #line 703 "/usr/homes/chet/src/bash/src/parse.y"
991
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
992
+      break;
993
+  
994
+    case 54:
995
+! #line 705 "/usr/homes/chet/src/bash/src/parse.y"
996
+      { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
997
+      break;
998
+  
999
+    case 55:
1000
+! #line 709 "/usr/homes/chet/src/bash/src/parse.y"
1001
+      {
1002
+  			  (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
1003
+--- 2566,2585 ----
1004
+  
1005
+    case 52:
1006
+! #line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1007
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
1008
+      break;
1009
+  
1010
+    case 53:
1011
+! #line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1012
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
1013
+      break;
1014
+  
1015
+    case 54:
1016
+! #line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1017
+      { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
1018
+      break;
1019
+  
1020
+    case 55:
1021
+! #line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1022
+      {
1023
+  			  (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
1024
+***************
1025
+*** 2583,2587 ****
1026
+  
1027
+    case 56:
1028
+! #line 713 "/usr/homes/chet/src/bash/src/parse.y"
1029
+      {
1030
+  			  register REDIRECT *t;
1031
+--- 2588,2592 ----
1032
+  
1033
+    case 56:
1034
+! #line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1035
+      {
1036
+  			  register REDIRECT *t;
1037
+***************
1038
+*** 2595,2619 ****
1039
+  
1040
+    case 57:
1041
+! #line 724 "/usr/homes/chet/src/bash/src/parse.y"
1042
+      { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
1043
+      break;
1044
+  
1045
+    case 58:
1046
+! #line 726 "/usr/homes/chet/src/bash/src/parse.y"
1047
+      { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
1048
+      break;
1049
+  
1050
+    case 59:
1051
+! #line 730 "/usr/homes/chet/src/bash/src/parse.y"
1052
+      { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
1053
+      break;
1054
+  
1055
+    case 60:
1056
+! #line 732 "/usr/homes/chet/src/bash/src/parse.y"
1057
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1058
+      break;
1059
+  
1060
+    case 61:
1061
+! #line 734 "/usr/homes/chet/src/bash/src/parse.y"
1062
+      {
1063
+  			  COMMAND *tc;
1064
+--- 2600,2624 ----
1065
+  
1066
+    case 57:
1067
+! #line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1068
+      { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
1069
+      break;
1070
+  
1071
+    case 58:
1072
+! #line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1073
+      { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
1074
+      break;
1075
+  
1076
+    case 59:
1077
+! #line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1078
+      { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
1079
+      break;
1080
+  
1081
+    case 60:
1082
+! #line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1083
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1084
+      break;
1085
+  
1086
+    case 61:
1087
+! #line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1088
+      {
1089
+  			  COMMAND *tc;
1090
+***************
1091
+*** 2634,2703 ****
1092
+  
1093
+    case 62:
1094
+! #line 750 "/usr/homes/chet/src/bash/src/parse.y"
1095
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1096
+      break;
1097
+  
1098
+    case 63:
1099
+! #line 752 "/usr/homes/chet/src/bash/src/parse.y"
1100
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1101
+      break;
1102
+  
1103
+    case 64:
1104
+! #line 756 "/usr/homes/chet/src/bash/src/parse.y"
1105
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1106
+      break;
1107
+  
1108
+    case 65:
1109
+! #line 758 "/usr/homes/chet/src/bash/src/parse.y"
1110
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1111
+      break;
1112
+  
1113
+    case 66:
1114
+! #line 760 "/usr/homes/chet/src/bash/src/parse.y"
1115
+      { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
1116
+      break;
1117
+  
1118
+    case 67:
1119
+! #line 762 "/usr/homes/chet/src/bash/src/parse.y"
1120
+      { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
1121
+      break;
1122
+  
1123
+    case 68:
1124
+! #line 764 "/usr/homes/chet/src/bash/src/parse.y"
1125
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1126
+      break;
1127
+  
1128
+    case 69:
1129
+! #line 766 "/usr/homes/chet/src/bash/src/parse.y"
1130
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1131
+      break;
1132
+  
1133
+    case 70:
1134
+! #line 768 "/usr/homes/chet/src/bash/src/parse.y"
1135
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1136
+      break;
1137
+  
1138
+    case 71:
1139
+! #line 770 "/usr/homes/chet/src/bash/src/parse.y"
1140
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1141
+      break;
1142
+  
1143
+    case 72:
1144
+! #line 772 "/usr/homes/chet/src/bash/src/parse.y"
1145
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1146
+      break;
1147
+  
1148
+    case 73:
1149
+! #line 774 "/usr/homes/chet/src/bash/src/parse.y"
1150
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1151
+      break;
1152
+  
1153
+    case 74:
1154
+! #line 776 "/usr/homes/chet/src/bash/src/parse.y"
1155
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1156
+      break;
1157
+  
1158
+    case 75:
1159
+! #line 780 "/usr/homes/chet/src/bash/src/parse.y"
1160
+      {
1161
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1162
+--- 2639,2708 ----
1163
+  
1164
+    case 62:
1165
+! #line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1166
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1167
+      break;
1168
+  
1169
+    case 63:
1170
+! #line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1171
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1172
+      break;
1173
+  
1174
+    case 64:
1175
+! #line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1176
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1177
+      break;
1178
+  
1179
+    case 65:
1180
+! #line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1181
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1182
+      break;
1183
+  
1184
+    case 66:
1185
+! #line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1186
+      { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
1187
+      break;
1188
+  
1189
+    case 67:
1190
+! #line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1191
+      { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
1192
+      break;
1193
+  
1194
+    case 68:
1195
+! #line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1196
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1197
+      break;
1198
+  
1199
+    case 69:
1200
+! #line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1201
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1202
+      break;
1203
+  
1204
+    case 70:
1205
+! #line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1206
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1207
+      break;
1208
+  
1209
+    case 71:
1210
+! #line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1211
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1212
+      break;
1213
+  
1214
+    case 72:
1215
+! #line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1216
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1217
+      break;
1218
+  
1219
+    case 73:
1220
+! #line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1221
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1222
+      break;
1223
+  
1224
+    case 74:
1225
+! #line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1226
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1227
+      break;
1228
+  
1229
+    case 75:
1230
+! #line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1231
+      {
1232
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1233
+***************
1234
+*** 2707,2711 ****
1235
+  
1236
+    case 76:
1237
+! #line 785 "/usr/homes/chet/src/bash/src/parse.y"
1238
+      {
1239
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1240
+--- 2712,2716 ----
1241
+  
1242
+    case 76:
1243
+! #line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1244
+      {
1245
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1246
+***************
1247
+*** 2715,2719 ****
1248
+  
1249
+    case 77:
1250
+! #line 790 "/usr/homes/chet/src/bash/src/parse.y"
1251
+      {
1252
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1253
+--- 2720,2724 ----
1254
+  
1255
+    case 77:
1256
+! #line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1257
+      {
1258
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1259
+***************
1260
+*** 2723,2727 ****
1261
+  
1262
+    case 78:
1263
+! #line 795 "/usr/homes/chet/src/bash/src/parse.y"
1264
+      {
1265
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1266
+--- 2728,2732 ----
1267
+  
1268
+    case 78:
1269
+! #line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1270
+      {
1271
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1272
+***************
1273
+*** 2731,2735 ****
1274
+  
1275
+    case 79:
1276
+! #line 800 "/usr/homes/chet/src/bash/src/parse.y"
1277
+      {
1278
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1279
+--- 2736,2740 ----
1280
+  
1281
+    case 79:
1282
+! #line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1283
+      {
1284
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1285
+***************
1286
+*** 2739,2743 ****
1287
+  
1288
+    case 80:
1289
+! #line 805 "/usr/homes/chet/src/bash/src/parse.y"
1290
+      {
1291
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1292
+--- 2744,2748 ----
1293
+  
1294
+    case 80:
1295
+! #line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1296
+      {
1297
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1298
+***************
1299
+*** 2747,2751 ****
1300
+  
1301
+    case 81:
1302
+! #line 810 "/usr/homes/chet/src/bash/src/parse.y"
1303
+      {
1304
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1305
+--- 2752,2756 ----
1306
+  
1307
+    case 81:
1308
+! #line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1309
+      {
1310
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1311
+***************
1312
+*** 2755,2759 ****
1313
+  
1314
+    case 82:
1315
+! #line 815 "/usr/homes/chet/src/bash/src/parse.y"
1316
+      {
1317
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1318
+--- 2760,2764 ----
1319
+  
1320
+    case 82:
1321
+! #line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1322
+      {
1323
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1324
+***************
1325
+*** 2763,2767 ****
1326
+  
1327
+    case 83:
1328
+! #line 822 "/usr/homes/chet/src/bash/src/parse.y"
1329
+      {
1330
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1331
+--- 2768,2772 ----
1332
+  
1333
+    case 83:
1334
+! #line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1335
+      {
1336
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1337
+***************
1338
+*** 2771,2775 ****
1339
+  
1340
+    case 84:
1341
+! #line 827 "/usr/homes/chet/src/bash/src/parse.y"
1342
+      {
1343
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1344
+--- 2776,2780 ----
1345
+  
1346
+    case 84:
1347
+! #line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1348
+      {
1349
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1350
+***************
1351
+*** 2779,2783 ****
1352
+  
1353
+    case 85:
1354
+! #line 832 "/usr/homes/chet/src/bash/src/parse.y"
1355
+      {
1356
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1357
+--- 2784,2788 ----
1358
+  
1359
+    case 85:
1360
+! #line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1361
+      {
1362
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1363
+***************
1364
+*** 2787,2791 ****
1365
+  
1366
+    case 86:
1367
+! #line 837 "/usr/homes/chet/src/bash/src/parse.y"
1368
+      {
1369
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1370
+--- 2792,2796 ----
1371
+  
1372
+    case 86:
1373
+! #line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1374
+      {
1375
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1376
+***************
1377
+*** 2795,2799 ****
1378
+  
1379
+    case 87:
1380
+! #line 844 "/usr/homes/chet/src/bash/src/parse.y"
1381
+      {
1382
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1383
+--- 2800,2804 ----
1384
+  
1385
+    case 87:
1386
+! #line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1387
+      {
1388
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1389
+***************
1390
+*** 2803,2807 ****
1391
+  
1392
+    case 88:
1393
+! #line 849 "/usr/homes/chet/src/bash/src/parse.y"
1394
+      {
1395
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1396
+--- 2808,2812 ----
1397
+  
1398
+    case 88:
1399
+! #line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1400
+      {
1401
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1402
+***************
1403
+*** 2811,2815 ****
1404
+  
1405
+    case 89:
1406
+! #line 854 "/usr/homes/chet/src/bash/src/parse.y"
1407
+      {
1408
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1409
+--- 2816,2820 ----
1410
+  
1411
+    case 89:
1412
+! #line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1413
+      {
1414
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1415
+***************
1416
+*** 2819,2823 ****
1417
+  
1418
+    case 90:
1419
+! #line 859 "/usr/homes/chet/src/bash/src/parse.y"
1420
+      {
1421
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1422
+--- 2824,2828 ----
1423
+  
1424
+    case 90:
1425
+! #line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1426
+      {
1427
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1428
+***************
1429
+*** 2827,2831 ****
1430
+  
1431
+    case 91:
1432
+! #line 864 "/usr/homes/chet/src/bash/src/parse.y"
1433
+      {
1434
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1435
+--- 2832,2836 ----
1436
+  
1437
+    case 91:
1438
+! #line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1439
+      {
1440
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1441
+***************
1442
+*** 2835,2839 ****
1443
+  
1444
+    case 92:
1445
+! #line 869 "/usr/homes/chet/src/bash/src/parse.y"
1446
+      {
1447
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1448
+--- 2840,2844 ----
1449
+  
1450
+    case 92:
1451
+! #line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1452
+      {
1453
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1454
+***************
1455
+*** 2843,2847 ****
1456
+  
1457
+    case 93:
1458
+! #line 876 "/usr/homes/chet/src/bash/src/parse.y"
1459
+      {
1460
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
1461
+--- 2848,2852 ----
1462
+  
1463
+    case 93:
1464
+! #line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1465
+      {
1466
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
1467
+***************
1468
+*** 2851,2855 ****
1469
+  
1470
+    case 94:
1471
+! #line 881 "/usr/homes/chet/src/bash/src/parse.y"
1472
+      {
1473
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
1474
+--- 2856,2860 ----
1475
+  
1476
+    case 94:
1477
+! #line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1478
+      {
1479
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
1480
+***************
1481
+*** 2859,2863 ****
1482
+  
1483
+    case 95:
1484
+! #line 886 "/usr/homes/chet/src/bash/src/parse.y"
1485
+      {
1486
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
1487
+--- 2864,2868 ----
1488
+  
1489
+    case 95:
1490
+! #line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1491
+      {
1492
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
1493
+***************
1494
+*** 2867,2891 ****
1495
+  
1496
+    case 96:
1497
+! #line 893 "/usr/homes/chet/src/bash/src/parse.y"
1498
+      { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
1499
+      break;
1500
+  
1501
+    case 97:
1502
+! #line 896 "/usr/homes/chet/src/bash/src/parse.y"
1503
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
1504
+      break;
1505
+  
1506
+    case 98:
1507
+! #line 899 "/usr/homes/chet/src/bash/src/parse.y"
1508
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
1509
+      break;
1510
+  
1511
+    case 99:
1512
+! #line 903 "/usr/homes/chet/src/bash/src/parse.y"
1513
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1514
+      break;
1515
+  
1516
+    case 100:
1517
+! #line 905 "/usr/homes/chet/src/bash/src/parse.y"
1518
+      {
1519
+  			  COMMAND *tc;
1520
+--- 2872,2896 ----
1521
+  
1522
+    case 96:
1523
+! #line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1524
+      { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
1525
+      break;
1526
+  
1527
+    case 97:
1528
+! #line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1529
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
1530
+      break;
1531
+  
1532
+    case 98:
1533
+! #line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1534
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
1535
+      break;
1536
+  
1537
+    case 99:
1538
+! #line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1539
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1540
+      break;
1541
+  
1542
+    case 100:
1543
+! #line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1544
+      {
1545
+  			  COMMAND *tc;
1546
+***************
1547
+*** 2919,2923 ****
1548
+  
1549
+    case 101:
1550
+! #line 936 "/usr/homes/chet/src/bash/src/parse.y"
1551
+      {
1552
+  			  (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
1553
+--- 2924,2928 ----
1554
+  
1555
+    case 101:
1556
+! #line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1557
+      {
1558
+  			  (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
1559
+***************
1560
+*** 2927,2931 ****
1561
+  
1562
+    case 102:
1563
+! #line 943 "/usr/homes/chet/src/bash/src/parse.y"
1564
+      {
1565
+  			  (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
1566
+--- 2932,2936 ----
1567
+  
1568
+    case 102:
1569
+! #line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1570
+      {
1571
+  			  (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
1572
+***************
1573
+*** 2935,2939 ****
1574
+  
1575
+    case 103:
1576
+! #line 948 "/usr/homes/chet/src/bash/src/parse.y"
1577
+      {
1578
+  			  COMMAND *tc;
1579
+--- 2940,2944 ----
1580
+  
1581
+    case 103:
1582
+! #line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1583
+      {
1584
+  			  COMMAND *tc;
1585
+***************
1586
+*** 2955,2959 ****
1587
+  
1588
+    case 104:
1589
+! #line 965 "/usr/homes/chet/src/bash/src/parse.y"
1590
+      {
1591
+  			  (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
1592
+--- 2960,2964 ----
1593
+  
1594
+    case 104:
1595
+! #line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1596
+      {
1597
+  			  (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
1598
+***************
1599
+*** 2963,2967 ****
1600
+  
1601
+    case 105:
1602
+! #line 970 "/usr/homes/chet/src/bash/src/parse.y"
1603
+      {
1604
+  			  COMMAND *tc;
1605
+--- 2968,2972 ----
1606
+  
1607
+    case 105:
1608
+! #line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1609
+      {
1610
+  			  COMMAND *tc;
1611
+***************
1612
+*** 2983,2987 ****
1613
+  
1614
+    case 106:
1615
+! #line 987 "/usr/homes/chet/src/bash/src/parse.y"
1616
+      {
1617
+  			  (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
1618
+--- 2988,2992 ----
1619
+  
1620
+    case 106:
1621
+! #line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1622
+      {
1623
+  			  (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
1624
+***************
1625
+*** 2991,3105 ****
1626
+  
1627
+    case 107:
1628
+! #line 994 "/usr/homes/chet/src/bash/src/parse.y"
1629
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
1630
+      break;
1631
+  
1632
+    case 108:
1633
+! #line 996 "/usr/homes/chet/src/bash/src/parse.y"
1634
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
1635
+      break;
1636
+  
1637
+    case 109:
1638
+! #line 998 "/usr/homes/chet/src/bash/src/parse.y"
1639
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
1640
+      break;
1641
+  
1642
+    case 110:
1643
+! #line 1003 "/usr/homes/chet/src/bash/src/parse.y"
1644
+      { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
1645
+      break;
1646
+  
1647
+    case 111:
1648
+! #line 1007 "/usr/homes/chet/src/bash/src/parse.y"
1649
+      { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
1650
+      break;
1651
+  
1652
+    case 112:
1653
+! #line 1011 "/usr/homes/chet/src/bash/src/parse.y"
1654
+      { (yyval.command) = (yyvsp[(2) - (3)].command); }
1655
+      break;
1656
+  
1657
+    case 113:
1658
+! #line 1015 "/usr/homes/chet/src/bash/src/parse.y"
1659
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
1660
+      break;
1661
+  
1662
+    case 114:
1663
+! #line 1017 "/usr/homes/chet/src/bash/src/parse.y"
1664
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
1665
+      break;
1666
+  
1667
+    case 115:
1668
+! #line 1019 "/usr/homes/chet/src/bash/src/parse.y"
1669
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
1670
+      break;
1671
+  
1672
+    case 117:
1673
+! #line 1024 "/usr/homes/chet/src/bash/src/parse.y"
1674
+      { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
1675
+      break;
1676
+  
1677
+    case 118:
1678
+! #line 1028 "/usr/homes/chet/src/bash/src/parse.y"
1679
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
1680
+      break;
1681
+  
1682
+    case 119:
1683
+! #line 1030 "/usr/homes/chet/src/bash/src/parse.y"
1684
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
1685
+      break;
1686
+  
1687
+    case 120:
1688
+! #line 1032 "/usr/homes/chet/src/bash/src/parse.y"
1689
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
1690
+      break;
1691
+  
1692
+    case 121:
1693
+! #line 1034 "/usr/homes/chet/src/bash/src/parse.y"
1694
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
1695
+      break;
1696
+  
1697
+    case 122:
1698
+! #line 1038 "/usr/homes/chet/src/bash/src/parse.y"
1699
+      { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1700
+      break;
1701
+  
1702
+    case 123:
1703
+! #line 1040 "/usr/homes/chet/src/bash/src/parse.y"
1704
+      { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1705
+      break;
1706
+  
1707
+    case 124:
1708
+! #line 1042 "/usr/homes/chet/src/bash/src/parse.y"
1709
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1710
+      break;
1711
+  
1712
+    case 125:
1713
+! #line 1044 "/usr/homes/chet/src/bash/src/parse.y"
1714
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1715
+      break;
1716
+  
1717
+    case 126:
1718
+! #line 1046 "/usr/homes/chet/src/bash/src/parse.y"
1719
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1720
+      break;
1721
+  
1722
+    case 127:
1723
+! #line 1048 "/usr/homes/chet/src/bash/src/parse.y"
1724
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1725
+      break;
1726
+  
1727
+    case 128:
1728
+! #line 1052 "/usr/homes/chet/src/bash/src/parse.y"
1729
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
1730
+      break;
1731
+  
1732
+    case 129:
1733
+! #line 1054 "/usr/homes/chet/src/bash/src/parse.y"
1734
+      { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
1735
+      break;
1736
+  
1737
+    case 130:
1738
+! #line 1063 "/usr/homes/chet/src/bash/src/parse.y"
1739
+      {
1740
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1741
+--- 2996,3110 ----
1742
+  
1743
+    case 107:
1744
+! #line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1745
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
1746
+      break;
1747
+  
1748
+    case 108:
1749
+! #line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1750
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
1751
+      break;
1752
+  
1753
+    case 109:
1754
+! #line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1755
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
1756
+      break;
1757
+  
1758
+    case 110:
1759
+! #line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1760
+      { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
1761
+      break;
1762
+  
1763
+    case 111:
1764
+! #line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1765
+      { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
1766
+      break;
1767
+  
1768
+    case 112:
1769
+! #line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1770
+      { (yyval.command) = (yyvsp[(2) - (3)].command); }
1771
+      break;
1772
+  
1773
+    case 113:
1774
+! #line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1775
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
1776
+      break;
1777
+  
1778
+    case 114:
1779
+! #line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1780
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
1781
+      break;
1782
+  
1783
+    case 115:
1784
+! #line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1785
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
1786
+      break;
1787
+  
1788
+    case 117:
1789
+! #line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1790
+      { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
1791
+      break;
1792
+  
1793
+    case 118:
1794
+! #line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1795
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
1796
+      break;
1797
+  
1798
+    case 119:
1799
+! #line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1800
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
1801
+      break;
1802
+  
1803
+    case 120:
1804
+! #line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1805
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
1806
+      break;
1807
+  
1808
+    case 121:
1809
+! #line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1810
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
1811
+      break;
1812
+  
1813
+    case 122:
1814
+! #line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1815
+      { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1816
+      break;
1817
+  
1818
+    case 123:
1819
+! #line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1820
+      { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1821
+      break;
1822
+  
1823
+    case 124:
1824
+! #line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1825
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1826
+      break;
1827
+  
1828
+    case 125:
1829
+! #line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1830
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1831
+      break;
1832
+  
1833
+    case 126:
1834
+! #line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1835
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1836
+      break;
1837
+  
1838
+    case 127:
1839
+! #line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1840
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1841
+      break;
1842
+  
1843
+    case 128:
1844
+! #line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1845
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
1846
+      break;
1847
+  
1848
+    case 129:
1849
+! #line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1850
+      { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
1851
+      break;
1852
+  
1853
+    case 130:
1854
+! #line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1855
+      {
1856
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1857
+***************
1858
+*** 3110,3114 ****
1859
+  
1860
+    case 132:
1861
+! #line 1072 "/usr/homes/chet/src/bash/src/parse.y"
1862
+      {
1863
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1864
+--- 3115,3119 ----
1865
+  
1866
+    case 132:
1867
+! #line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1868
+      {
1869
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1870
+***************
1871
+*** 3117,3121 ****
1872
+  
1873
+    case 134:
1874
+! #line 1079 "/usr/homes/chet/src/bash/src/parse.y"
1875
+      {
1876
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1877
+--- 3122,3126 ----
1878
+  
1879
+    case 134:
1880
+! #line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1881
+      {
1882
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1883
+***************
1884
+*** 3127,3141 ****
1885
+  
1886
+    case 136:
1887
+! #line 1090 "/usr/homes/chet/src/bash/src/parse.y"
1888
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1889
+      break;
1890
+  
1891
+    case 137:
1892
+! #line 1092 "/usr/homes/chet/src/bash/src/parse.y"
1893
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1894
+      break;
1895
+  
1896
+    case 138:
1897
+! #line 1094 "/usr/homes/chet/src/bash/src/parse.y"
1898
+      {
1899
+  			  if ((yyvsp[(1) - (4)].command)->type == cm_connection)
1900
+--- 3132,3146 ----
1901
+  
1902
+    case 136:
1903
+! #line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1904
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1905
+      break;
1906
+  
1907
+    case 137:
1908
+! #line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1909
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1910
+      break;
1911
+  
1912
+    case 138:
1913
+! #line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1914
+      {
1915
+  			  if ((yyvsp[(1) - (4)].command)->type == cm_connection)
1916
+***************
1917
+*** 3147,3181 ****
1918
+  
1919
+    case 139:
1920
+! #line 1101 "/usr/homes/chet/src/bash/src/parse.y"
1921
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1922
+      break;
1923
+  
1924
+    case 140:
1925
+! #line 1103 "/usr/homes/chet/src/bash/src/parse.y"
1926
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1927
+      break;
1928
+  
1929
+    case 141:
1930
+! #line 1105 "/usr/homes/chet/src/bash/src/parse.y"
1931
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1932
+      break;
1933
+  
1934
+    case 144:
1935
+! #line 1113 "/usr/homes/chet/src/bash/src/parse.y"
1936
+      { (yyval.number) = '\n'; }
1937
+      break;
1938
+  
1939
+    case 145:
1940
+! #line 1115 "/usr/homes/chet/src/bash/src/parse.y"
1941
+      { (yyval.number) = ';'; }
1942
+      break;
1943
+  
1944
+    case 146:
1945
+! #line 1117 "/usr/homes/chet/src/bash/src/parse.y"
1946
+      { (yyval.number) = yacc_EOF; }
1947
+      break;
1948
+  
1949
+    case 149:
1950
+! #line 1131 "/usr/homes/chet/src/bash/src/parse.y"
1951
+      {
1952
+  			  (yyval.command) = (yyvsp[(1) - (1)].command);
1953
+--- 3152,3186 ----
1954
+  
1955
+    case 139:
1956
+! #line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1957
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1958
+      break;
1959
+  
1960
+    case 140:
1961
+! #line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1962
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1963
+      break;
1964
+  
1965
+    case 141:
1966
+! #line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1967
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1968
+      break;
1969
+  
1970
+    case 144:
1971
+! #line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1972
+      { (yyval.number) = '\n'; }
1973
+      break;
1974
+  
1975
+    case 145:
1976
+! #line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1977
+      { (yyval.number) = ';'; }
1978
+      break;
1979
+  
1980
+    case 146:
1981
+! #line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1982
+      { (yyval.number) = yacc_EOF; }
1983
+      break;
1984
+  
1985
+    case 149:
1986
+! #line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1987
+      {
1988
+  			  (yyval.command) = (yyvsp[(1) - (1)].command);
1989
+***************
1990
+*** 3193,3197 ****
1991
+  
1992
+    case 150:
1993
+! #line 1144 "/usr/homes/chet/src/bash/src/parse.y"
1994
+      {
1995
+  			  if ((yyvsp[(1) - (2)].command)->type == cm_connection)
1996
+--- 3198,3202 ----
1997
+  
1998
+    case 150:
1999
+! #line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2000
+      {
2001
+  			  if ((yyvsp[(1) - (2)].command)->type == cm_connection)
2002
+***************
2003
+*** 3212,3216 ****
2004
+  
2005
+    case 151:
2006
+! #line 1160 "/usr/homes/chet/src/bash/src/parse.y"
2007
+      {
2008
+  			  (yyval.command) = (yyvsp[(1) - (2)].command);
2009
+--- 3217,3221 ----
2010
+  
2011
+    case 151:
2012
+! #line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2013
+      {
2014
+  			  (yyval.command) = (yyvsp[(1) - (2)].command);
2015
+***************
2016
+*** 3228,3242 ****
2017
+  
2018
+    case 152:
2019
+! #line 1175 "/usr/homes/chet/src/bash/src/parse.y"
2020
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
2021
+      break;
2022
+  
2023
+    case 153:
2024
+! #line 1177 "/usr/homes/chet/src/bash/src/parse.y"
2025
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
2026
+      break;
2027
+  
2028
+    case 154:
2029
+! #line 1179 "/usr/homes/chet/src/bash/src/parse.y"
2030
+      {
2031
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
2032
+--- 3233,3247 ----
2033
+  
2034
+    case 152:
2035
+! #line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2036
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
2037
+      break;
2038
+  
2039
+    case 153:
2040
+! #line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2041
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
2042
+      break;
2043
+  
2044
+    case 154:
2045
+! #line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2046
+      {
2047
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
2048
+***************
2049
+*** 3248,3267 ****
2050
+  
2051
+    case 155:
2052
+! #line 1186 "/usr/homes/chet/src/bash/src/parse.y"
2053
+      { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
2054
+      break;
2055
+  
2056
+    case 156:
2057
+! #line 1189 "/usr/homes/chet/src/bash/src/parse.y"
2058
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
2059
+      break;
2060
+  
2061
+    case 157:
2062
+! #line 1193 "/usr/homes/chet/src/bash/src/parse.y"
2063
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
2064
+      break;
2065
+  
2066
+    case 158:
2067
+! #line 1195 "/usr/homes/chet/src/bash/src/parse.y"
2068
+      {
2069
+  			  if ((yyvsp[(2) - (2)].command))
2070
+--- 3253,3272 ----
2071
+  
2072
+    case 155:
2073
+! #line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2074
+      { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
2075
+      break;
2076
+  
2077
+    case 156:
2078
+! #line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2079
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
2080
+      break;
2081
+  
2082
+    case 157:
2083
+! #line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2084
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
2085
+      break;
2086
+  
2087
+    case 158:
2088
+! #line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2089
+      {
2090
+  			  if ((yyvsp[(2) - (2)].command))
2091
+***************
2092
+*** 3272,3276 ****
2093
+  
2094
+    case 159:
2095
+! #line 1201 "/usr/homes/chet/src/bash/src/parse.y"
2096
+      {
2097
+  			  if ((yyvsp[(2) - (2)].command))
2098
+--- 3277,3281 ----
2099
+  
2100
+    case 159:
2101
+! #line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2102
+      {
2103
+  			  if ((yyvsp[(2) - (2)].command))
2104
+***************
2105
+*** 3281,3285 ****
2106
+  
2107
+    case 160:
2108
+! #line 1207 "/usr/homes/chet/src/bash/src/parse.y"
2109
+      {
2110
+  			  ELEMENT x;
2111
+--- 3286,3290 ----
2112
+  
2113
+    case 160:
2114
+! #line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2115
+      {
2116
+  			  ELEMENT x;
2117
+***************
2118
+*** 3301,3305 ****
2119
+  
2120
+    case 161:
2121
+! #line 1224 "/usr/homes/chet/src/bash/src/parse.y"
2122
+      {
2123
+  			  ELEMENT x;
2124
+--- 3306,3310 ----
2125
+  
2126
+    case 161:
2127
+! #line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2128
+      {
2129
+  			  ELEMENT x;
2130
+***************
2131
+*** 3322,3331 ****
2132
+  
2133
+    case 162:
2134
+! #line 1244 "/usr/homes/chet/src/bash/src/parse.y"
2135
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
2136
+      break;
2137
+  
2138
+    case 163:
2139
+! #line 1246 "/usr/homes/chet/src/bash/src/parse.y"
2140
+      {
2141
+  			  /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
2142
+--- 3327,3336 ----
2143
+  
2144
+    case 162:
2145
+! #line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2146
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
2147
+      break;
2148
+  
2149
+    case 163:
2150
+! #line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2151
+      {
2152
+  			  /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
2153
+***************
2154
+*** 3353,3372 ****
2155
+  
2156
+    case 164:
2157
+! #line 1269 "/usr/homes/chet/src/bash/src/parse.y"
2158
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
2159
+      break;
2160
+  
2161
+    case 165:
2162
+! #line 1273 "/usr/homes/chet/src/bash/src/parse.y"
2163
+      { (yyval.number) = CMD_TIME_PIPELINE; }
2164
+      break;
2165
+  
2166
+    case 166:
2167
+! #line 1275 "/usr/homes/chet/src/bash/src/parse.y"
2168
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
2169
+      break;
2170
+  
2171
+    case 167:
2172
+! #line 1277 "/usr/homes/chet/src/bash/src/parse.y"
2173
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
2174
+      break;
2175
+--- 3358,3377 ----
2176
+  
2177
+    case 164:
2178
+! #line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2179
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
2180
+      break;
2181
+  
2182
+    case 165:
2183
+! #line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2184
+      { (yyval.number) = CMD_TIME_PIPELINE; }
2185
+      break;
2186
+  
2187
+    case 166:
2188
+! #line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2189
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
2190
+      break;
2191
+  
2192
+    case 167:
2193
+! #line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2194
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
2195
+      break;
2196
+***************
2197
+*** 3374,3378 ****
2198
+  
2199
+  /* Line 1267 of yacc.c.  */
2200
+! #line 3377 "y.tab.c"
2201
+        default: break;
2202
+      }
2203
+--- 3379,3383 ----
2204
+  
2205
+  /* Line 1267 of yacc.c.  */
2206
+! #line 3382 "y.tab.c"
2207
+        default: break;
2208
+      }
2209
+***************
2210
+*** 3588,3592 ****
2211
+  
2212
+  
2213
+! #line 1279 "/usr/homes/chet/src/bash/src/parse.y"
2214
+  
2215
+  
2216
+--- 3593,3597 ----
2217
+  
2218
+  
2219
+! #line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2220
+  
2221
+  
2222
+***************
2223
+*** 4949,4952 ****
2224
+--- 4954,4972 ----
2225
+  static int esacs_needed_count;
2226
+  
2227
++ static void
2228
++ push_heredoc (r)
2229
++      REDIRECT *r;
2230
++ {
2231
++   if (need_here_doc >= HEREDOC_MAX)
2232
++     {
2233
++       last_command_exit_value = EX_BADUSAGE;
2234
++       need_here_doc = 0;
2235
++       report_syntax_error (_("maximum here-document count exceeded"));
2236
++       reset_parser ();
2237
++       exit_shell (last_command_exit_value);
2238
++     }
2239
++   redir_stack[need_here_doc++] = r;
2240
++ }
2241
++ 
2242
+  void
2243
+  gather_here_documents ()
2244
+***************
2245
+*** 8542,8543 ****
2246
+--- 8562,8564 ----
2247
+  }
2248
+  #endif /* HANDLE_MULTIBYTE */
2249
++ 
2250
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
2251
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
2252
+***************
2253
+*** 26,30 ****
2254
+     looks for to find the patch level (for the sccs version string). */
2255
+  
2256
+! #define PATCHLEVEL 27
2257
+  
2258
+  #endif /* _PATCHLEVEL_H_ */
2259
+--- 26,30 ----
2260
+     looks for to find the patch level (for the sccs version string). */
2261
+  
2262
+! #define PATCHLEVEL 28
2263
+  
2264
+  #endif /* _PATCHLEVEL_H_ */
0 2265
new file mode 100644
... ...
@@ -0,0 +1,59 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-029
5
+
6
+Bug-Reported-by:	Michal Zalewski <lcamtuf@coredump.cx>
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:
9
+
10
+Bug-Description:
11
+
12
+When bash is parsing a function definition that contains a here-document
13
+delimited by end-of-file (or end-of-string), it leaves the closing delimiter
14
+uninitialized.  This can result in an invalid memory access when the parsed
15
+function is later copied.
16
+
17
+Patch (apply with `patch -p0'):
18
+
19
+*** ../bash-4.3.28/make_cmd.c	2011-12-16 08:08:01.000000000 -0500
20
+--- make_cmd.c	2014-10-02 11:24:23.000000000 -0400
21
+***************
22
+*** 693,696 ****
23
+--- 693,697 ----
24
+    temp->redirector = source;
25
+    temp->redirectee = dest_and_filename;
26
++   temp->here_doc_eof = 0;
27
+    temp->instruction = instruction;
28
+    temp->flags = 0;
29
+*** ../bash-4.3.28/copy_cmd.c	2009-09-11 16:28:02.000000000 -0400
30
+--- copy_cmd.c	2014-10-02 11:24:23.000000000 -0400
31
+***************
32
+*** 127,131 ****
33
+      case r_reading_until:
34
+      case r_deblank_reading_until:
35
+!       new_redirect->here_doc_eof = savestring (redirect->here_doc_eof);
36
+        /*FALLTHROUGH*/
37
+      case r_reading_string:
38
+--- 127,131 ----
39
+      case r_reading_until:
40
+      case r_deblank_reading_until:
41
+!       new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0;
42
+        /*FALLTHROUGH*/
43
+      case r_reading_string:
44
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
45
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
46
+***************
47
+*** 26,30 ****
48
+     looks for to find the patch level (for the sccs version string). */
49
+  
50
+! #define PATCHLEVEL 28
51
+  
52
+  #endif /* _PATCHLEVEL_H_ */
53
+--- 26,30 ----
54
+     looks for to find the patch level (for the sccs version string). */
55
+  
56
+! #define PATCHLEVEL 29
57
+  
58
+  #endif /* _PATCHLEVEL_H_ */
0 59
new file mode 100644
... ...
@@ -0,0 +1,2064 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-030
5
+
6
+Bug-Reported-by:	Michal Zalewski <lcamtuf@coredump.cx>
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:
9
+
10
+Bug-Description:
11
+
12
+A combination of nested command substitutions and function importing from
13
+the environment can cause bash to execute code appearing in the environment
14
+variable value following the function definition.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3.29/builtins/evalstring.c	2014-10-01 12:57:47.000000000 -0400
19
+--- builtins/evalstring.c	2014-10-03 11:57:04.000000000 -0400
20
+***************
21
+*** 309,318 ****
22
+  	      struct fd_bitmap *bitmap;
23
+  
24
+! 	      if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
25
+  		{
26
+! 		  internal_warning ("%s: ignoring function definition attempt", from_file);
27
+! 		  should_jump_to_top_level = 0;
28
+! 		  last_result = last_command_exit_value = EX_BADUSAGE;
29
+! 		  break;
30
+  		}
31
+  
32
+--- 313,335 ----
33
+  	      struct fd_bitmap *bitmap;
34
+  
35
+! 	      if (flags & SEVAL_FUNCDEF)
36
+  		{
37
+! 		  char *x;
38
+! 
39
+! 		  /* If the command parses to something other than a straight
40
+! 		     function definition, or if we have not consumed the entire
41
+! 		     string, or if the parser has transformed the function
42
+! 		     name (as parsing will if it begins or ends with shell
43
+! 		     whitespace, for example), reject the attempt */
44
+! 		  if (command->type != cm_function_def ||
45
+! 		      ((x = parser_remaining_input ()) && *x) ||
46
+! 		      (STREQ (from_file, command->value.Function_def->name->word) == 0))
47
+! 		    {
48
+! 		      internal_warning (_("%s: ignoring function definition attempt"), from_file);
49
+! 		      should_jump_to_top_level = 0;
50
+! 		      last_result = last_command_exit_value = EX_BADUSAGE;
51
+! 		      reset_parser ();
52
+! 		      break;
53
+! 		    }
54
+  		}
55
+  
56
+***************
57
+*** 379,383 ****
58
+  
59
+  	      if (flags & SEVAL_ONECMD)
60
+! 		break;
61
+  	    }
62
+  	}
63
+--- 396,403 ----
64
+  
65
+  	      if (flags & SEVAL_ONECMD)
66
+! 		{
67
+! 		  reset_parser ();
68
+! 		  break;
69
+! 		}
70
+  	    }
71
+  	}
72
+*** ../bash-4.3.29/parse.y	2014-10-01 12:58:43.000000000 -0400
73
+--- parse.y	2014-10-03 14:48:59.000000000 -0400
74
+***************
75
+*** 2539,2542 ****
76
+--- 2539,2552 ----
77
+  }
78
+  
79
++ char *
80
++ parser_remaining_input ()
81
++ {
82
++   if (shell_input_line == 0)
83
++     return 0;
84
++   if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
85
++     return '\0';	/* XXX */
86
++   return (shell_input_line + shell_input_line_index);
87
++ }
88
++ 
89
+  #ifdef INCLUDE_UNUSED
90
+  /* Back the input pointer up by one, effectively `ungetting' a character. */
91
+***************
92
+*** 4028,4033 ****
93
+    /* reset_parser clears shell_input_line and associated variables */
94
+    restore_input_line_state (&ls);
95
+!   if (interactive)
96
+!     token_to_read = 0;
97
+  
98
+    /* Need to find how many characters parse_and_execute consumed, update
99
+--- 4053,4058 ----
100
+    /* reset_parser clears shell_input_line and associated variables */
101
+    restore_input_line_state (&ls);
102
+! 
103
+!   token_to_read = 0;
104
+  
105
+    /* Need to find how many characters parse_and_execute consumed, update
106
+*** ../bash-4.3.29/shell.h	2014-10-01 12:57:39.000000000 -0400
107
+--- shell.h	2014-10-03 14:49:12.000000000 -0400
108
+***************
109
+*** 181,184 ****
110
+--- 181,186 ----
111
+  
112
+  /* Let's try declaring these here. */
113
++ extern char *parser_remaining_input __P((void));
114
++ 
115
+  extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
116
+  extern void restore_parser_state __P((sh_parser_state_t *));
117
+*** ../bash-4.3.28/y.tab.c	2014-10-01 13:09:46.000000000 -0400
118
+--- y.tab.c	2014-10-04 19:26:22.000000000 -0400
119
+***************
120
+*** 169,173 ****
121
+  
122
+  /* Copy the first part of user declarations.  */
123
+! #line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
124
+  
125
+  #include "config.h"
126
+--- 169,173 ----
127
+  
128
+  /* Copy the first part of user declarations.  */
129
+! #line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y"
130
+  
131
+  #include "config.h"
132
+***************
133
+*** 498,502 ****
134
+  #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
135
+  typedef union YYSTYPE
136
+! #line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
137
+  {
138
+    WORD_DESC *word;		/* the word that we read. */
139
+--- 498,502 ----
140
+  #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
141
+  typedef union YYSTYPE
142
+! #line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y"
143
+  {
144
+    WORD_DESC *word;		/* the word that we read. */
145
+***************
146
+*** 2099,2103 ****
147
+      {
148
+          case 2:
149
+! #line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
150
+      {
151
+  			  /* Case of regular command.  Discard the error
152
+--- 2099,2103 ----
153
+      {
154
+          case 2:
155
+! #line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y"
156
+      {
157
+  			  /* Case of regular command.  Discard the error
158
+***************
159
+*** 2113,2117 ****
160
+  
161
+    case 3:
162
+! #line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
163
+      {
164
+  			  /* Case of regular command, but not a very
165
+--- 2113,2117 ----
166
+  
167
+    case 3:
168
+! #line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y"
169
+      {
170
+  			  /* Case of regular command, but not a very
171
+***************
172
+*** 2125,2129 ****
173
+  
174
+    case 4:
175
+! #line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
176
+      {
177
+  			  /* Error during parsing.  Return NULL command. */
178
+--- 2125,2129 ----
179
+  
180
+    case 4:
181
+! #line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y"
182
+      {
183
+  			  /* Error during parsing.  Return NULL command. */
184
+***************
185
+*** 2143,2147 ****
186
+  
187
+    case 5:
188
+! #line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
189
+      {
190
+  			  /* Case of EOF seen by itself.  Do ignoreeof or
191
+--- 2143,2147 ----
192
+  
193
+    case 5:
194
+! #line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y"
195
+      {
196
+  			  /* Case of EOF seen by itself.  Do ignoreeof or
197
+***************
198
+*** 2154,2168 ****
199
+  
200
+    case 6:
201
+! #line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
202
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
203
+      break;
204
+  
205
+    case 7:
206
+! #line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
207
+      { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
208
+      break;
209
+  
210
+    case 8:
211
+! #line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
212
+      {
213
+  			  source.dest = 1;
214
+--- 2154,2168 ----
215
+  
216
+    case 6:
217
+! #line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y"
218
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
219
+      break;
220
+  
221
+    case 7:
222
+! #line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y"
223
+      { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
224
+      break;
225
+  
226
+    case 8:
227
+! #line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y"
228
+      {
229
+  			  source.dest = 1;
230
+***************
231
+*** 2173,2177 ****
232
+  
233
+    case 9:
234
+! #line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
235
+      {
236
+  			  source.dest = 0;
237
+--- 2173,2177 ----
238
+  
239
+    case 9:
240
+! #line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y"
241
+      {
242
+  			  source.dest = 0;
243
+***************
244
+*** 2182,2186 ****
245
+  
246
+    case 10:
247
+! #line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
248
+      {
249
+  			  source.dest = (yyvsp[(1) - (3)].number);
250
+--- 2182,2186 ----
251
+  
252
+    case 10:
253
+! #line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y"
254
+      {
255
+  			  source.dest = (yyvsp[(1) - (3)].number);
256
+***************
257
+*** 2191,2195 ****
258
+  
259
+    case 11:
260
+! #line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
261
+      {
262
+  			  source.dest = (yyvsp[(1) - (3)].number);
263
+--- 2191,2195 ----
264
+  
265
+    case 11:
266
+! #line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y"
267
+      {
268
+  			  source.dest = (yyvsp[(1) - (3)].number);
269
+***************
270
+*** 2200,2204 ****
271
+  
272
+    case 12:
273
+! #line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
274
+      {
275
+  			  source.filename = (yyvsp[(1) - (3)].word);
276
+--- 2200,2204 ----
277
+  
278
+    case 12:
279
+! #line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y"
280
+      {
281
+  			  source.filename = (yyvsp[(1) - (3)].word);
282
+***************
283
+*** 2209,2213 ****
284
+  
285
+    case 13:
286
+! #line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
287
+      {
288
+  			  source.filename = (yyvsp[(1) - (3)].word);
289
+--- 2209,2213 ----
290
+  
291
+    case 13:
292
+! #line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y"
293
+      {
294
+  			  source.filename = (yyvsp[(1) - (3)].word);
295
+***************
296
+*** 2218,2222 ****
297
+  
298
+    case 14:
299
+! #line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
300
+      {
301
+  			  source.dest = 1;
302
+--- 2218,2222 ----
303
+  
304
+    case 14:
305
+! #line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y"
306
+      {
307
+  			  source.dest = 1;
308
+***************
309
+*** 2227,2231 ****
310
+  
311
+    case 15:
312
+! #line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
313
+      {
314
+  			  source.dest = (yyvsp[(1) - (3)].number);
315
+--- 2227,2231 ----
316
+  
317
+    case 15:
318
+! #line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y"
319
+      {
320
+  			  source.dest = (yyvsp[(1) - (3)].number);
321
+***************
322
+*** 2236,2240 ****
323
+  
324
+    case 16:
325
+! #line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
326
+      {
327
+  			  source.filename = (yyvsp[(1) - (3)].word);
328
+--- 2236,2240 ----
329
+  
330
+    case 16:
331
+! #line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y"
332
+      {
333
+  			  source.filename = (yyvsp[(1) - (3)].word);
334
+***************
335
+*** 2245,2249 ****
336
+  
337
+    case 17:
338
+! #line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
339
+      {
340
+  			  source.dest = 1;
341
+--- 2245,2249 ----
342
+  
343
+    case 17:
344
+! #line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y"
345
+      {
346
+  			  source.dest = 1;
347
+***************
348
+*** 2254,2258 ****
349
+  
350
+    case 18:
351
+! #line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
352
+      {
353
+  			  source.dest = (yyvsp[(1) - (3)].number);
354
+--- 2254,2258 ----
355
+  
356
+    case 18:
357
+! #line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y"
358
+      {
359
+  			  source.dest = (yyvsp[(1) - (3)].number);
360
+***************
361
+*** 2263,2267 ****
362
+  
363
+    case 19:
364
+! #line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
365
+      {
366
+  			  source.filename = (yyvsp[(1) - (3)].word);
367
+--- 2263,2267 ----
368
+  
369
+    case 19:
370
+! #line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y"
371
+      {
372
+  			  source.filename = (yyvsp[(1) - (3)].word);
373
+***************
374
+*** 2272,2276 ****
375
+  
376
+    case 20:
377
+! #line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
378
+      {
379
+  			  source.dest = 0;
380
+--- 2272,2276 ----
381
+  
382
+    case 20:
383
+! #line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y"
384
+      {
385
+  			  source.dest = 0;
386
+***************
387
+*** 2281,2285 ****
388
+  
389
+    case 21:
390
+! #line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
391
+      {
392
+  			  source.dest = (yyvsp[(1) - (3)].number);
393
+--- 2281,2285 ----
394
+  
395
+    case 21:
396
+! #line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y"
397
+      {
398
+  			  source.dest = (yyvsp[(1) - (3)].number);
399
+***************
400
+*** 2290,2294 ****
401
+  
402
+    case 22:
403
+! #line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
404
+      {
405
+  			  source.filename = (yyvsp[(1) - (3)].word);
406
+--- 2290,2294 ----
407
+  
408
+    case 22:
409
+! #line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y"
410
+      {
411
+  			  source.filename = (yyvsp[(1) - (3)].word);
412
+***************
413
+*** 2299,2303 ****
414
+  
415
+    case 23:
416
+! #line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
417
+      {
418
+  			  source.dest = 0;
419
+--- 2299,2303 ----
420
+  
421
+    case 23:
422
+! #line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y"
423
+      {
424
+  			  source.dest = 0;
425
+***************
426
+*** 2309,2313 ****
427
+  
428
+    case 24:
429
+! #line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
430
+      {
431
+  			  source.dest = (yyvsp[(1) - (3)].number);
432
+--- 2309,2313 ----
433
+  
434
+    case 24:
435
+! #line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y"
436
+      {
437
+  			  source.dest = (yyvsp[(1) - (3)].number);
438
+***************
439
+*** 2319,2323 ****
440
+  
441
+    case 25:
442
+! #line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
443
+      {
444
+  			  source.filename = (yyvsp[(1) - (3)].word);
445
+--- 2319,2323 ----
446
+  
447
+    case 25:
448
+! #line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y"
449
+      {
450
+  			  source.filename = (yyvsp[(1) - (3)].word);
451
+***************
452
+*** 2329,2333 ****
453
+  
454
+    case 26:
455
+! #line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
456
+      {
457
+  			  source.dest = 0;
458
+--- 2329,2333 ----
459
+  
460
+    case 26:
461
+! #line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y"
462
+      {
463
+  			  source.dest = 0;
464
+***************
465
+*** 2339,2343 ****
466
+  
467
+    case 27:
468
+! #line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
469
+      {
470
+  			  source.dest = (yyvsp[(1) - (3)].number);
471
+--- 2339,2343 ----
472
+  
473
+    case 27:
474
+! #line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y"
475
+      {
476
+  			  source.dest = (yyvsp[(1) - (3)].number);
477
+***************
478
+*** 2349,2353 ****
479
+  
480
+    case 28:
481
+! #line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
482
+      {
483
+  			  source.filename = (yyvsp[(1) - (3)].word);
484
+--- 2349,2353 ----
485
+  
486
+    case 28:
487
+! #line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y"
488
+      {
489
+  			  source.filename = (yyvsp[(1) - (3)].word);
490
+***************
491
+*** 2359,2363 ****
492
+  
493
+    case 29:
494
+! #line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
495
+      {
496
+  			  source.dest = 0;
497
+--- 2359,2363 ----
498
+  
499
+    case 29:
500
+! #line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y"
501
+      {
502
+  			  source.dest = 0;
503
+***************
504
+*** 2368,2372 ****
505
+  
506
+    case 30:
507
+! #line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
508
+      {
509
+  			  source.dest = (yyvsp[(1) - (3)].number);
510
+--- 2368,2372 ----
511
+  
512
+    case 30:
513
+! #line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y"
514
+      {
515
+  			  source.dest = (yyvsp[(1) - (3)].number);
516
+***************
517
+*** 2377,2381 ****
518
+  
519
+    case 31:
520
+! #line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
521
+      {
522
+  			  source.filename = (yyvsp[(1) - (3)].word);
523
+--- 2377,2381 ----
524
+  
525
+    case 31:
526
+! #line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y"
527
+      {
528
+  			  source.filename = (yyvsp[(1) - (3)].word);
529
+***************
530
+*** 2386,2390 ****
531
+  
532
+    case 32:
533
+! #line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
534
+      {
535
+  			  source.dest = 0;
536
+--- 2386,2390 ----
537
+  
538
+    case 32:
539
+! #line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y"
540
+      {
541
+  			  source.dest = 0;
542
+***************
543
+*** 2395,2399 ****
544
+  
545
+    case 33:
546
+! #line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
547
+      {
548
+  			  source.dest = (yyvsp[(1) - (3)].number);
549
+--- 2395,2399 ----
550
+  
551
+    case 33:
552
+! #line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y"
553
+      {
554
+  			  source.dest = (yyvsp[(1) - (3)].number);
555
+***************
556
+*** 2404,2408 ****
557
+  
558
+    case 34:
559
+! #line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
560
+      {
561
+  			  source.filename = (yyvsp[(1) - (3)].word);
562
+--- 2404,2408 ----
563
+  
564
+    case 34:
565
+! #line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y"
566
+      {
567
+  			  source.filename = (yyvsp[(1) - (3)].word);
568
+***************
569
+*** 2413,2417 ****
570
+  
571
+    case 35:
572
+! #line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
573
+      {
574
+  			  source.dest = 1;
575
+--- 2413,2417 ----
576
+  
577
+    case 35:
578
+! #line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y"
579
+      {
580
+  			  source.dest = 1;
581
+***************
582
+*** 2422,2426 ****
583
+  
584
+    case 36:
585
+! #line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
586
+      {
587
+  			  source.dest = (yyvsp[(1) - (3)].number);
588
+--- 2422,2426 ----
589
+  
590
+    case 36:
591
+! #line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y"
592
+      {
593
+  			  source.dest = (yyvsp[(1) - (3)].number);
594
+***************
595
+*** 2431,2435 ****
596
+  
597
+    case 37:
598
+! #line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
599
+      {
600
+  			  source.filename = (yyvsp[(1) - (3)].word);
601
+--- 2431,2435 ----
602
+  
603
+    case 37:
604
+! #line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y"
605
+      {
606
+  			  source.filename = (yyvsp[(1) - (3)].word);
607
+***************
608
+*** 2440,2444 ****
609
+  
610
+    case 38:
611
+! #line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
612
+      {
613
+  			  source.dest = 0;
614
+--- 2440,2444 ----
615
+  
616
+    case 38:
617
+! #line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y"
618
+      {
619
+  			  source.dest = 0;
620
+***************
621
+*** 2449,2453 ****
622
+  
623
+    case 39:
624
+! #line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
625
+      {
626
+  			  source.dest = (yyvsp[(1) - (3)].number);
627
+--- 2449,2453 ----
628
+  
629
+    case 39:
630
+! #line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y"
631
+      {
632
+  			  source.dest = (yyvsp[(1) - (3)].number);
633
+***************
634
+*** 2458,2462 ****
635
+  
636
+    case 40:
637
+! #line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
638
+      {
639
+  			  source.filename = (yyvsp[(1) - (3)].word);
640
+--- 2458,2462 ----
641
+  
642
+    case 40:
643
+! #line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y"
644
+      {
645
+  			  source.filename = (yyvsp[(1) - (3)].word);
646
+***************
647
+*** 2467,2471 ****
648
+  
649
+    case 41:
650
+! #line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
651
+      {
652
+  			  source.dest = 1;
653
+--- 2467,2471 ----
654
+  
655
+    case 41:
656
+! #line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y"
657
+      {
658
+  			  source.dest = 1;
659
+***************
660
+*** 2476,2480 ****
661
+  
662
+    case 42:
663
+! #line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
664
+      {
665
+  			  source.dest = (yyvsp[(1) - (3)].number);
666
+--- 2476,2480 ----
667
+  
668
+    case 42:
669
+! #line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y"
670
+      {
671
+  			  source.dest = (yyvsp[(1) - (3)].number);
672
+***************
673
+*** 2485,2489 ****
674
+  
675
+    case 43:
676
+! #line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
677
+      {
678
+  			  source.filename = (yyvsp[(1) - (3)].word);
679
+--- 2485,2489 ----
680
+  
681
+    case 43:
682
+! #line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y"
683
+      {
684
+  			  source.filename = (yyvsp[(1) - (3)].word);
685
+***************
686
+*** 2494,2498 ****
687
+  
688
+    case 44:
689
+! #line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
690
+      {
691
+  			  source.dest = 1;
692
+--- 2494,2498 ----
693
+  
694
+    case 44:
695
+! #line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y"
696
+      {
697
+  			  source.dest = 1;
698
+***************
699
+*** 2503,2507 ****
700
+  
701
+    case 45:
702
+! #line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
703
+      {
704
+  			  source.dest = (yyvsp[(1) - (3)].number);
705
+--- 2503,2507 ----
706
+  
707
+    case 45:
708
+! #line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y"
709
+      {
710
+  			  source.dest = (yyvsp[(1) - (3)].number);
711
+***************
712
+*** 2512,2516 ****
713
+  
714
+    case 46:
715
+! #line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
716
+      {
717
+  			  source.filename = (yyvsp[(1) - (3)].word);
718
+--- 2512,2516 ----
719
+  
720
+    case 46:
721
+! #line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y"
722
+      {
723
+  			  source.filename = (yyvsp[(1) - (3)].word);
724
+***************
725
+*** 2521,2525 ****
726
+  
727
+    case 47:
728
+! #line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
729
+      {
730
+  			  source.dest = 0;
731
+--- 2521,2525 ----
732
+  
733
+    case 47:
734
+! #line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y"
735
+      {
736
+  			  source.dest = 0;
737
+***************
738
+*** 2530,2534 ****
739
+  
740
+    case 48:
741
+! #line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
742
+      {
743
+  			  source.dest = (yyvsp[(1) - (3)].number);
744
+--- 2530,2534 ----
745
+  
746
+    case 48:
747
+! #line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y"
748
+      {
749
+  			  source.dest = (yyvsp[(1) - (3)].number);
750
+***************
751
+*** 2539,2543 ****
752
+  
753
+    case 49:
754
+! #line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
755
+      {
756
+  			  source.filename = (yyvsp[(1) - (3)].word);
757
+--- 2539,2543 ----
758
+  
759
+    case 49:
760
+! #line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y"
761
+      {
762
+  			  source.filename = (yyvsp[(1) - (3)].word);
763
+***************
764
+*** 2548,2552 ****
765
+  
766
+    case 50:
767
+! #line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
768
+      {
769
+  			  source.dest = 1;
770
+--- 2548,2552 ----
771
+  
772
+    case 50:
773
+! #line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y"
774
+      {
775
+  			  source.dest = 1;
776
+***************
777
+*** 2557,2561 ****
778
+  
779
+    case 51:
780
+! #line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
781
+      {
782
+  			  source.dest = 1;
783
+--- 2557,2561 ----
784
+  
785
+    case 51:
786
+! #line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y"
787
+      {
788
+  			  source.dest = 1;
789
+***************
790
+*** 2566,2585 ****
791
+  
792
+    case 52:
793
+! #line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
794
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
795
+      break;
796
+  
797
+    case 53:
798
+! #line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
799
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
800
+      break;
801
+  
802
+    case 54:
803
+! #line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
804
+      { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
805
+      break;
806
+  
807
+    case 55:
808
+! #line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
809
+      {
810
+  			  (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
811
+--- 2566,2585 ----
812
+  
813
+    case 52:
814
+! #line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y"
815
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
816
+      break;
817
+  
818
+    case 53:
819
+! #line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y"
820
+      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
821
+      break;
822
+  
823
+    case 54:
824
+! #line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y"
825
+      { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
826
+      break;
827
+  
828
+    case 55:
829
+! #line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y"
830
+      {
831
+  			  (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
832
+***************
833
+*** 2588,2592 ****
834
+  
835
+    case 56:
836
+! #line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
837
+      {
838
+  			  register REDIRECT *t;
839
+--- 2588,2592 ----
840
+  
841
+    case 56:
842
+! #line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y"
843
+      {
844
+  			  register REDIRECT *t;
845
+***************
846
+*** 2600,2624 ****
847
+  
848
+    case 57:
849
+! #line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
850
+      { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
851
+      break;
852
+  
853
+    case 58:
854
+! #line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
855
+      { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
856
+      break;
857
+  
858
+    case 59:
859
+! #line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
860
+      { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
861
+      break;
862
+  
863
+    case 60:
864
+! #line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
865
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
866
+      break;
867
+  
868
+    case 61:
869
+! #line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
870
+      {
871
+  			  COMMAND *tc;
872
+--- 2600,2624 ----
873
+  
874
+    case 57:
875
+! #line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y"
876
+      { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
877
+      break;
878
+  
879
+    case 58:
880
+! #line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y"
881
+      { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
882
+      break;
883
+  
884
+    case 59:
885
+! #line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y"
886
+      { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
887
+      break;
888
+  
889
+    case 60:
890
+! #line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y"
891
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
892
+      break;
893
+  
894
+    case 61:
895
+! #line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y"
896
+      {
897
+  			  COMMAND *tc;
898
+***************
899
+*** 2639,2708 ****
900
+  
901
+    case 62:
902
+! #line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
903
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
904
+      break;
905
+  
906
+    case 63:
907
+! #line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
908
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
909
+      break;
910
+  
911
+    case 64:
912
+! #line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
913
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
914
+      break;
915
+  
916
+    case 65:
917
+! #line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
918
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
919
+      break;
920
+  
921
+    case 66:
922
+! #line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
923
+      { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
924
+      break;
925
+  
926
+    case 67:
927
+! #line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
928
+      { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
929
+      break;
930
+  
931
+    case 68:
932
+! #line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
933
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
934
+      break;
935
+  
936
+    case 69:
937
+! #line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
938
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
939
+      break;
940
+  
941
+    case 70:
942
+! #line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
943
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
944
+      break;
945
+  
946
+    case 71:
947
+! #line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
948
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
949
+      break;
950
+  
951
+    case 72:
952
+! #line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
953
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
954
+      break;
955
+  
956
+    case 73:
957
+! #line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
958
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
959
+      break;
960
+  
961
+    case 74:
962
+! #line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
963
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
964
+      break;
965
+  
966
+    case 75:
967
+! #line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
968
+      {
969
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
970
+--- 2639,2708 ----
971
+  
972
+    case 62:
973
+! #line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y"
974
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
975
+      break;
976
+  
977
+    case 63:
978
+! #line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y"
979
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
980
+      break;
981
+  
982
+    case 64:
983
+! #line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y"
984
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
985
+      break;
986
+  
987
+    case 65:
988
+! #line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y"
989
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
990
+      break;
991
+  
992
+    case 66:
993
+! #line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y"
994
+      { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
995
+      break;
996
+  
997
+    case 67:
998
+! #line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y"
999
+      { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
1000
+      break;
1001
+  
1002
+    case 68:
1003
+! #line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1004
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1005
+      break;
1006
+  
1007
+    case 69:
1008
+! #line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1009
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1010
+      break;
1011
+  
1012
+    case 70:
1013
+! #line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1014
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1015
+      break;
1016
+  
1017
+    case 71:
1018
+! #line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1019
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1020
+      break;
1021
+  
1022
+    case 72:
1023
+! #line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1024
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1025
+      break;
1026
+  
1027
+    case 73:
1028
+! #line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1029
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1030
+      break;
1031
+  
1032
+    case 74:
1033
+! #line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1034
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1035
+      break;
1036
+  
1037
+    case 75:
1038
+! #line 785 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1039
+      {
1040
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1041
+***************
1042
+*** 2712,2716 ****
1043
+  
1044
+    case 76:
1045
+! #line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1046
+      {
1047
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1048
+--- 2712,2716 ----
1049
+  
1050
+    case 76:
1051
+! #line 790 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1052
+      {
1053
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1054
+***************
1055
+*** 2720,2724 ****
1056
+  
1057
+    case 77:
1058
+! #line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1059
+      {
1060
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1061
+--- 2720,2724 ----
1062
+  
1063
+    case 77:
1064
+! #line 795 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1065
+      {
1066
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1067
+***************
1068
+*** 2728,2732 ****
1069
+  
1070
+    case 78:
1071
+! #line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1072
+      {
1073
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1074
+--- 2728,2732 ----
1075
+  
1076
+    case 78:
1077
+! #line 800 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1078
+      {
1079
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1080
+***************
1081
+*** 2736,2740 ****
1082
+  
1083
+    case 79:
1084
+! #line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1085
+      {
1086
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1087
+--- 2736,2740 ----
1088
+  
1089
+    case 79:
1090
+! #line 805 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1091
+      {
1092
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1093
+***************
1094
+*** 2744,2748 ****
1095
+  
1096
+    case 80:
1097
+! #line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1098
+      {
1099
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1100
+--- 2744,2748 ----
1101
+  
1102
+    case 80:
1103
+! #line 810 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1104
+      {
1105
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1106
+***************
1107
+*** 2752,2756 ****
1108
+  
1109
+    case 81:
1110
+! #line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1111
+      {
1112
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1113
+--- 2752,2756 ----
1114
+  
1115
+    case 81:
1116
+! #line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1117
+      {
1118
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1119
+***************
1120
+*** 2760,2764 ****
1121
+  
1122
+    case 82:
1123
+! #line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1124
+      {
1125
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1126
+--- 2760,2764 ----
1127
+  
1128
+    case 82:
1129
+! #line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1130
+      {
1131
+  			  (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
1132
+***************
1133
+*** 2768,2772 ****
1134
+  
1135
+    case 83:
1136
+! #line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1137
+      {
1138
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1139
+--- 2768,2772 ----
1140
+  
1141
+    case 83:
1142
+! #line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1143
+      {
1144
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1145
+***************
1146
+*** 2776,2780 ****
1147
+  
1148
+    case 84:
1149
+! #line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1150
+      {
1151
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1152
+--- 2776,2780 ----
1153
+  
1154
+    case 84:
1155
+! #line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1156
+      {
1157
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
1158
+***************
1159
+*** 2784,2788 ****
1160
+  
1161
+    case 85:
1162
+! #line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1163
+      {
1164
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1165
+--- 2784,2788 ----
1166
+  
1167
+    case 85:
1168
+! #line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1169
+      {
1170
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1171
+***************
1172
+*** 2792,2796 ****
1173
+  
1174
+    case 86:
1175
+! #line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1176
+      {
1177
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1178
+--- 2792,2796 ----
1179
+  
1180
+    case 86:
1181
+! #line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1182
+      {
1183
+  				  (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
1184
+***************
1185
+*** 2800,2804 ****
1186
+  
1187
+    case 87:
1188
+! #line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1189
+      {
1190
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1191
+--- 2800,2804 ----
1192
+  
1193
+    case 87:
1194
+! #line 849 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1195
+      {
1196
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1197
+***************
1198
+*** 2808,2812 ****
1199
+  
1200
+    case 88:
1201
+! #line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1202
+      {
1203
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1204
+--- 2808,2812 ----
1205
+  
1206
+    case 88:
1207
+! #line 854 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1208
+      {
1209
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
1210
+***************
1211
+*** 2816,2820 ****
1212
+  
1213
+    case 89:
1214
+! #line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1215
+      {
1216
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1217
+--- 2816,2820 ----
1218
+  
1219
+    case 89:
1220
+! #line 859 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1221
+      {
1222
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1223
+***************
1224
+*** 2824,2828 ****
1225
+  
1226
+    case 90:
1227
+! #line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1228
+      {
1229
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1230
+--- 2824,2828 ----
1231
+  
1232
+    case 90:
1233
+! #line 864 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1234
+      {
1235
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
1236
+***************
1237
+*** 2832,2836 ****
1238
+  
1239
+    case 91:
1240
+! #line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1241
+      {
1242
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1243
+--- 2832,2836 ----
1244
+  
1245
+    case 91:
1246
+! #line 869 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1247
+      {
1248
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1249
+***************
1250
+*** 2840,2844 ****
1251
+  
1252
+    case 92:
1253
+! #line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1254
+      {
1255
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1256
+--- 2840,2844 ----
1257
+  
1258
+    case 92:
1259
+! #line 874 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1260
+      {
1261
+  			  (yyval.command) = make_select_command ((yyvsp[(2) - (10)].word), REVERSE_LIST ((yyvsp[(5) - (10)].word_list), WORD_LIST *), (yyvsp[(9) - (10)].command), word_lineno[word_top]);
1262
+***************
1263
+*** 2848,2852 ****
1264
+  
1265
+    case 93:
1266
+! #line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1267
+      {
1268
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
1269
+--- 2848,2852 ----
1270
+  
1271
+    case 93:
1272
+! #line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1273
+      {
1274
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
1275
+***************
1276
+*** 2856,2860 ****
1277
+  
1278
+    case 94:
1279
+! #line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1280
+      {
1281
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
1282
+--- 2856,2860 ----
1283
+  
1284
+    case 94:
1285
+! #line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1286
+      {
1287
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
1288
+***************
1289
+*** 2864,2868 ****
1290
+  
1291
+    case 95:
1292
+! #line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1293
+      {
1294
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
1295
+--- 2864,2868 ----
1296
+  
1297
+    case 95:
1298
+! #line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1299
+      {
1300
+  			  (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
1301
+***************
1302
+*** 2872,2896 ****
1303
+  
1304
+    case 96:
1305
+! #line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1306
+      { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
1307
+      break;
1308
+  
1309
+    case 97:
1310
+! #line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1311
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
1312
+      break;
1313
+  
1314
+    case 98:
1315
+! #line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1316
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
1317
+      break;
1318
+  
1319
+    case 99:
1320
+! #line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1321
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1322
+      break;
1323
+  
1324
+    case 100:
1325
+! #line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1326
+      {
1327
+  			  COMMAND *tc;
1328
+--- 2872,2896 ----
1329
+  
1330
+    case 96:
1331
+! #line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1332
+      { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
1333
+      break;
1334
+  
1335
+    case 97:
1336
+! #line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1337
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
1338
+      break;
1339
+  
1340
+    case 98:
1341
+! #line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1342
+      { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
1343
+      break;
1344
+  
1345
+    case 99:
1346
+! #line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1347
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1348
+      break;
1349
+  
1350
+    case 100:
1351
+! #line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1352
+      {
1353
+  			  COMMAND *tc;
1354
+***************
1355
+*** 2924,2928 ****
1356
+  
1357
+    case 101:
1358
+! #line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1359
+      {
1360
+  			  (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
1361
+--- 2924,2928 ----
1362
+  
1363
+    case 101:
1364
+! #line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1365
+      {
1366
+  			  (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
1367
+***************
1368
+*** 2932,2936 ****
1369
+  
1370
+    case 102:
1371
+! #line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1372
+      {
1373
+  			  (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
1374
+--- 2932,2936 ----
1375
+  
1376
+    case 102:
1377
+! #line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1378
+      {
1379
+  			  (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
1380
+***************
1381
+*** 2940,2944 ****
1382
+  
1383
+    case 103:
1384
+! #line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1385
+      {
1386
+  			  COMMAND *tc;
1387
+--- 2940,2944 ----
1388
+  
1389
+    case 103:
1390
+! #line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1391
+      {
1392
+  			  COMMAND *tc;
1393
+***************
1394
+*** 2960,2964 ****
1395
+  
1396
+    case 104:
1397
+! #line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1398
+      {
1399
+  			  (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
1400
+--- 2960,2964 ----
1401
+  
1402
+    case 104:
1403
+! #line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1404
+      {
1405
+  			  (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
1406
+***************
1407
+*** 2968,2972 ****
1408
+  
1409
+    case 105:
1410
+! #line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1411
+      {
1412
+  			  COMMAND *tc;
1413
+--- 2968,2972 ----
1414
+  
1415
+    case 105:
1416
+! #line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1417
+      {
1418
+  			  COMMAND *tc;
1419
+***************
1420
+*** 2988,2992 ****
1421
+  
1422
+    case 106:
1423
+! #line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1424
+      {
1425
+  			  (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
1426
+--- 2988,2992 ----
1427
+  
1428
+    case 106:
1429
+! #line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1430
+      {
1431
+  			  (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
1432
+***************
1433
+*** 2996,3110 ****
1434
+  
1435
+    case 107:
1436
+! #line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1437
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
1438
+      break;
1439
+  
1440
+    case 108:
1441
+! #line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1442
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
1443
+      break;
1444
+  
1445
+    case 109:
1446
+! #line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1447
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
1448
+      break;
1449
+  
1450
+    case 110:
1451
+! #line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1452
+      { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
1453
+      break;
1454
+  
1455
+    case 111:
1456
+! #line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1457
+      { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
1458
+      break;
1459
+  
1460
+    case 112:
1461
+! #line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1462
+      { (yyval.command) = (yyvsp[(2) - (3)].command); }
1463
+      break;
1464
+  
1465
+    case 113:
1466
+! #line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1467
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
1468
+      break;
1469
+  
1470
+    case 114:
1471
+! #line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1472
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
1473
+      break;
1474
+  
1475
+    case 115:
1476
+! #line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1477
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
1478
+      break;
1479
+  
1480
+    case 117:
1481
+! #line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1482
+      { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
1483
+      break;
1484
+  
1485
+    case 118:
1486
+! #line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1487
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
1488
+      break;
1489
+  
1490
+    case 119:
1491
+! #line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1492
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
1493
+      break;
1494
+  
1495
+    case 120:
1496
+! #line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1497
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
1498
+      break;
1499
+  
1500
+    case 121:
1501
+! #line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1502
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
1503
+      break;
1504
+  
1505
+    case 122:
1506
+! #line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1507
+      { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1508
+      break;
1509
+  
1510
+    case 123:
1511
+! #line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1512
+      { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1513
+      break;
1514
+  
1515
+    case 124:
1516
+! #line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1517
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1518
+      break;
1519
+  
1520
+    case 125:
1521
+! #line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1522
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1523
+      break;
1524
+  
1525
+    case 126:
1526
+! #line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1527
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1528
+      break;
1529
+  
1530
+    case 127:
1531
+! #line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1532
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1533
+      break;
1534
+  
1535
+    case 128:
1536
+! #line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1537
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
1538
+      break;
1539
+  
1540
+    case 129:
1541
+! #line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1542
+      { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
1543
+      break;
1544
+  
1545
+    case 130:
1546
+! #line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1547
+      {
1548
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1549
+--- 2996,3110 ----
1550
+  
1551
+    case 107:
1552
+! #line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1553
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
1554
+      break;
1555
+  
1556
+    case 108:
1557
+! #line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1558
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
1559
+      break;
1560
+  
1561
+    case 109:
1562
+! #line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1563
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
1564
+      break;
1565
+  
1566
+    case 110:
1567
+! #line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1568
+      { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
1569
+      break;
1570
+  
1571
+    case 111:
1572
+! #line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1573
+      { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
1574
+      break;
1575
+  
1576
+    case 112:
1577
+! #line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1578
+      { (yyval.command) = (yyvsp[(2) - (3)].command); }
1579
+      break;
1580
+  
1581
+    case 113:
1582
+! #line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1583
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
1584
+      break;
1585
+  
1586
+    case 114:
1587
+! #line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1588
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
1589
+      break;
1590
+  
1591
+    case 115:
1592
+! #line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1593
+      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
1594
+      break;
1595
+  
1596
+    case 117:
1597
+! #line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1598
+      { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
1599
+      break;
1600
+  
1601
+    case 118:
1602
+! #line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1603
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
1604
+      break;
1605
+  
1606
+    case 119:
1607
+! #line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1608
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
1609
+      break;
1610
+  
1611
+    case 120:
1612
+! #line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1613
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
1614
+      break;
1615
+  
1616
+    case 121:
1617
+! #line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1618
+      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
1619
+      break;
1620
+  
1621
+    case 122:
1622
+! #line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1623
+      { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1624
+      break;
1625
+  
1626
+    case 123:
1627
+! #line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1628
+      { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1629
+      break;
1630
+  
1631
+    case 124:
1632
+! #line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1633
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1634
+      break;
1635
+  
1636
+    case 125:
1637
+! #line 1049 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1638
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1639
+      break;
1640
+  
1641
+    case 126:
1642
+! #line 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1643
+      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1644
+      break;
1645
+  
1646
+    case 127:
1647
+! #line 1053 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1648
+      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1649
+      break;
1650
+  
1651
+    case 128:
1652
+! #line 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1653
+      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
1654
+      break;
1655
+  
1656
+    case 129:
1657
+! #line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1658
+      { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
1659
+      break;
1660
+  
1661
+    case 130:
1662
+! #line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1663
+      {
1664
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1665
+***************
1666
+*** 3115,3119 ****
1667
+  
1668
+    case 132:
1669
+! #line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1670
+      {
1671
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1672
+--- 3115,3119 ----
1673
+  
1674
+    case 132:
1675
+! #line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1676
+      {
1677
+  			  (yyval.command) = (yyvsp[(2) - (2)].command);
1678
+***************
1679
+*** 3122,3126 ****
1680
+  
1681
+    case 134:
1682
+! #line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1683
+      {
1684
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1685
+--- 3122,3126 ----
1686
+  
1687
+    case 134:
1688
+! #line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1689
+      {
1690
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1691
+***************
1692
+*** 3132,3146 ****
1693
+  
1694
+    case 136:
1695
+! #line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1696
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1697
+      break;
1698
+  
1699
+    case 137:
1700
+! #line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1701
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1702
+      break;
1703
+  
1704
+    case 138:
1705
+! #line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1706
+      {
1707
+  			  if ((yyvsp[(1) - (4)].command)->type == cm_connection)
1708
+--- 3132,3146 ----
1709
+  
1710
+    case 136:
1711
+! #line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1712
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1713
+      break;
1714
+  
1715
+    case 137:
1716
+! #line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1717
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1718
+      break;
1719
+  
1720
+    case 138:
1721
+! #line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1722
+      {
1723
+  			  if ((yyvsp[(1) - (4)].command)->type == cm_connection)
1724
+***************
1725
+*** 3152,3186 ****
1726
+  
1727
+    case 139:
1728
+! #line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1729
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1730
+      break;
1731
+  
1732
+    case 140:
1733
+! #line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1734
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1735
+      break;
1736
+  
1737
+    case 141:
1738
+! #line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1739
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1740
+      break;
1741
+  
1742
+    case 144:
1743
+! #line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1744
+      { (yyval.number) = '\n'; }
1745
+      break;
1746
+  
1747
+    case 145:
1748
+! #line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1749
+      { (yyval.number) = ';'; }
1750
+      break;
1751
+  
1752
+    case 146:
1753
+! #line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1754
+      { (yyval.number) = yacc_EOF; }
1755
+      break;
1756
+  
1757
+    case 149:
1758
+! #line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1759
+      {
1760
+  			  (yyval.command) = (yyvsp[(1) - (1)].command);
1761
+--- 3152,3186 ----
1762
+  
1763
+    case 139:
1764
+! #line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1765
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1766
+      break;
1767
+  
1768
+    case 140:
1769
+! #line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1770
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1771
+      break;
1772
+  
1773
+    case 141:
1774
+! #line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1775
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1776
+      break;
1777
+  
1778
+    case 144:
1779
+! #line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1780
+      { (yyval.number) = '\n'; }
1781
+      break;
1782
+  
1783
+    case 145:
1784
+! #line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1785
+      { (yyval.number) = ';'; }
1786
+      break;
1787
+  
1788
+    case 146:
1789
+! #line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1790
+      { (yyval.number) = yacc_EOF; }
1791
+      break;
1792
+  
1793
+    case 149:
1794
+! #line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1795
+      {
1796
+  			  (yyval.command) = (yyvsp[(1) - (1)].command);
1797
+***************
1798
+*** 3198,3202 ****
1799
+  
1800
+    case 150:
1801
+! #line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1802
+      {
1803
+  			  if ((yyvsp[(1) - (2)].command)->type == cm_connection)
1804
+--- 3198,3202 ----
1805
+  
1806
+    case 150:
1807
+! #line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1808
+      {
1809
+  			  if ((yyvsp[(1) - (2)].command)->type == cm_connection)
1810
+***************
1811
+*** 3217,3221 ****
1812
+  
1813
+    case 151:
1814
+! #line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1815
+      {
1816
+  			  (yyval.command) = (yyvsp[(1) - (2)].command);
1817
+--- 3217,3221 ----
1818
+  
1819
+    case 151:
1820
+! #line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1821
+      {
1822
+  			  (yyval.command) = (yyvsp[(1) - (2)].command);
1823
+***************
1824
+*** 3233,3247 ****
1825
+  
1826
+    case 152:
1827
+! #line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1828
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1829
+      break;
1830
+  
1831
+    case 153:
1832
+! #line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1833
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1834
+      break;
1835
+  
1836
+    case 154:
1837
+! #line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1838
+      {
1839
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1840
+--- 3233,3247 ----
1841
+  
1842
+    case 152:
1843
+! #line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1844
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1845
+      break;
1846
+  
1847
+    case 153:
1848
+! #line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1849
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1850
+      break;
1851
+  
1852
+    case 154:
1853
+! #line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1854
+      {
1855
+  			  if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1856
+***************
1857
+*** 3253,3272 ****
1858
+  
1859
+    case 155:
1860
+! #line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1861
+      { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
1862
+      break;
1863
+  
1864
+    case 156:
1865
+! #line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1866
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1867
+      break;
1868
+  
1869
+    case 157:
1870
+! #line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1871
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1872
+      break;
1873
+  
1874
+    case 158:
1875
+! #line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1876
+      {
1877
+  			  if ((yyvsp[(2) - (2)].command))
1878
+--- 3253,3272 ----
1879
+  
1880
+    case 155:
1881
+! #line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1882
+      { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
1883
+      break;
1884
+  
1885
+    case 156:
1886
+! #line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1887
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1888
+      break;
1889
+  
1890
+    case 157:
1891
+! #line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1892
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1893
+      break;
1894
+  
1895
+    case 158:
1896
+! #line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1897
+      {
1898
+  			  if ((yyvsp[(2) - (2)].command))
1899
+***************
1900
+*** 3277,3281 ****
1901
+  
1902
+    case 159:
1903
+! #line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1904
+      {
1905
+  			  if ((yyvsp[(2) - (2)].command))
1906
+--- 3277,3281 ----
1907
+  
1908
+    case 159:
1909
+! #line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1910
+      {
1911
+  			  if ((yyvsp[(2) - (2)].command))
1912
+***************
1913
+*** 3286,3290 ****
1914
+  
1915
+    case 160:
1916
+! #line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1917
+      {
1918
+  			  ELEMENT x;
1919
+--- 3286,3290 ----
1920
+  
1921
+    case 160:
1922
+! #line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1923
+      {
1924
+  			  ELEMENT x;
1925
+***************
1926
+*** 3306,3310 ****
1927
+  
1928
+    case 161:
1929
+! #line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1930
+      {
1931
+  			  ELEMENT x;
1932
+--- 3306,3310 ----
1933
+  
1934
+    case 161:
1935
+! #line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1936
+      {
1937
+  			  ELEMENT x;
1938
+***************
1939
+*** 3327,3336 ****
1940
+  
1941
+    case 162:
1942
+! #line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1943
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
1944
+      break;
1945
+  
1946
+    case 163:
1947
+! #line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1948
+      {
1949
+  			  /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
1950
+--- 3327,3336 ----
1951
+  
1952
+    case 162:
1953
+! #line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1954
+      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
1955
+      break;
1956
+  
1957
+    case 163:
1958
+! #line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1959
+      {
1960
+  			  /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
1961
+***************
1962
+*** 3358,3377 ****
1963
+  
1964
+    case 164:
1965
+! #line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1966
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1967
+      break;
1968
+  
1969
+    case 165:
1970
+! #line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1971
+      { (yyval.number) = CMD_TIME_PIPELINE; }
1972
+      break;
1973
+  
1974
+    case 166:
1975
+! #line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1976
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
1977
+      break;
1978
+  
1979
+    case 167:
1980
+! #line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1981
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
1982
+      break;
1983
+--- 3358,3377 ----
1984
+  
1985
+    case 164:
1986
+! #line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1987
+      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1988
+      break;
1989
+  
1990
+    case 165:
1991
+! #line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1992
+      { (yyval.number) = CMD_TIME_PIPELINE; }
1993
+      break;
1994
+  
1995
+    case 166:
1996
+! #line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1997
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
1998
+      break;
1999
+  
2000
+    case 167:
2001
+! #line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2002
+      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
2003
+      break;
2004
+***************
2005
+*** 3593,3597 ****
2006
+  
2007
+  
2008
+! #line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
2009
+  
2010
+  
2011
+--- 3593,3597 ----
2012
+  
2013
+  
2014
+! #line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y"
2015
+  
2016
+  
2017
+***************
2018
+*** 4851,4854 ****
2019
+--- 4851,4864 ----
2020
+  }
2021
+  
2022
++ char *
2023
++ parser_remaining_input ()
2024
++ {
2025
++   if (shell_input_line == 0)
2026
++     return 0;
2027
++   if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
2028
++     return '\0';	/* XXX */
2029
++   return (shell_input_line + shell_input_line_index);
2030
++ }
2031
++ 
2032
+  #ifdef INCLUDE_UNUSED
2033
+  /* Back the input pointer up by one, effectively `ungetting' a character. */
2034
+***************
2035
+*** 6340,6345 ****
2036
+    /* reset_parser clears shell_input_line and associated variables */
2037
+    restore_input_line_state (&ls);
2038
+!   if (interactive)
2039
+!     token_to_read = 0;
2040
+  
2041
+    /* Need to find how many characters parse_and_execute consumed, update
2042
+--- 6350,6355 ----
2043
+    /* reset_parser clears shell_input_line and associated variables */
2044
+    restore_input_line_state (&ls);
2045
+! 
2046
+!   token_to_read = 0;
2047
+  
2048
+    /* Need to find how many characters parse_and_execute consumed, update
2049
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
2050
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
2051
+***************
2052
+*** 26,30 ****
2053
+     looks for to find the patch level (for the sccs version string). */
2054
+  
2055
+! #define PATCHLEVEL 29
2056
+  
2057
+  #endif /* _PATCHLEVEL_H_ */
2058
+--- 26,30 ----
2059
+     looks for to find the patch level (for the sccs version string). */
2060
+  
2061
+! #define PATCHLEVEL 30
2062
+  
2063
+  #endif /* _PATCHLEVEL_H_ */
0 2064
new file mode 100644
... ...
@@ -0,0 +1,112 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-031
5
+
6
+Bug-Reported-by:	lolilolicon <lolilolicon@gmail.com>
7
+Bug-Reference-ID:	<CAMtVo_Nz=32Oq=zWTb6=+8gUNXOo2rRvud1W4oPnA-cgVk_ZqQ@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00139.html
9
+
10
+Bug-Description:
11
+
12
+The new nameref assignment functionality introduced in bash-4.3 did not perform
13
+enough validation on the variable value and would create variables with
14
+invalid names.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/subst.h	2014-01-11 21:02:27.000000000 -0500
19
+--- subst.h	2014-09-01 12:16:56.000000000 -0400
20
+***************
21
+*** 48,51 ****
22
+--- 48,52 ----
23
+  #define ASS_MKGLOBAL	0x0008	/* force global assignment */
24
+  #define ASS_NAMEREF	0x0010	/* assigning to nameref variable */
25
++ #define ASS_FROMREF	0x0020	/* assigning from value of nameref variable */
26
+  
27
+  /* Flags for the string extraction functions. */
28
+*** ../bash-4.3-patched/variables.c	2014-05-15 08:26:50.000000000 -0400
29
+--- variables.c	2014-09-01 14:37:44.000000000 -0400
30
+***************
31
+*** 2504,2511 ****
32
+       int hflags, aflags;
33
+  {
34
+!   char *newval;
35
+    SHELL_VAR *entry;
36
+  
37
+    entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
38
+    /* Follow the nameref chain here if this is the global variables table */
39
+    if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
40
+--- 2566,2590 ----
41
+       int hflags, aflags;
42
+  {
43
+!   char *newname, *newval;
44
+    SHELL_VAR *entry;
45
++ #if defined (ARRAY_VARS)
46
++   arrayind_t ind;
47
++   char *subp;
48
++   int sublen;
49
++ #endif
50
+  
51
++   newname = 0;
52
++ #if defined (ARRAY_VARS)
53
++   if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name))
54
++     {
55
++       newname = array_variable_name (name, &subp, &sublen);
56
++       if (newname == 0)
57
++ 	return (SHELL_VAR *)NULL;	/* XXX */
58
++       entry = hash_lookup (newname, table);
59
++     }
60
++   else
61
++ #endif
62
+    entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table);
63
++ 
64
+    /* Follow the nameref chain here if this is the global variables table */
65
+    if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table)
66
+***************
67
+*** 2538,2541 ****
68
+--- 2617,2630 ----
69
+        }
70
+      }
71
++ #if defined (ARRAY_VARS)
72
++   else if (entry == 0 && newname)
73
++     {
74
++       entry = make_new_array_variable (newname);	/* indexed array by default */
75
++       if (entry == 0)
76
++ 	return entry;
77
++       ind = array_expand_index (name, subp, sublen);
78
++       bind_array_element (entry, ind, value, aflags);
79
++     }
80
++ #endif
81
+    else if (entry == 0)
82
+      {
83
+***************
84
+*** 2658,2662 ****
85
+  		      if (nameref_cell (nv) == 0)
86
+  			return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
87
+! 		      return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags));
88
+  		    }
89
+  		  else
90
+--- 2747,2752 ----
91
+  		      if (nameref_cell (nv) == 0)
92
+  			return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
93
+! 		      /* XXX - bug here with ref=array[index] */
94
+! 		      return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF));
95
+  		    }
96
+  		  else
97
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
98
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
99
+***************
100
+*** 26,30 ****
101
+     looks for to find the patch level (for the sccs version string). */
102
+  
103
+! #define PATCHLEVEL 30
104
+  
105
+  #endif /* _PATCHLEVEL_H_ */
106
+--- 26,30 ----
107
+     looks for to find the patch level (for the sccs version string). */
108
+  
109
+! #define PATCHLEVEL 31
110
+  
111
+  #endif /* _PATCHLEVEL_H_ */
0 112
new file mode 100644
... ...
@@ -0,0 +1,51 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-032
5
+
6
+Bug-Reported-by:	crispusfairbairn@gmail.com
7
+Bug-Reference-ID:	<b5e499f7-3b98-408d-9f94-c0387580e73a@googlegroups.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html
9
+
10
+Bug-Description:
11
+
12
+When bash is running in Posix mode, it allows signals -- including SIGCHLD --
13
+to interrupt the `wait' builtin, as Posix requires.  However, the interrupt
14
+causes bash to not run a SIGCHLD trap for all exited children.  This patch
15
+fixes the issue and restores the documented behavior in Posix mode.
16
+
17
+Patch (apply with `patch -p0'):
18
+
19
+*** ../bash-4.3-patched/jobs.c	2014-05-14 09:20:15.000000000 -0400
20
+--- jobs.c	2014-09-09 11:50:38.000000000 -0400
21
+***************
22
+*** 3340,3344 ****
23
+  	{
24
+  	  interrupt_immediately = 0;
25
+! 	  trap_handler (SIGCHLD);	/* set pending_traps[SIGCHLD] */
26
+  	  wait_signal_received = SIGCHLD;
27
+  	  /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
28
+--- 3346,3352 ----
29
+  	{
30
+  	  interrupt_immediately = 0;
31
+! 	  /* This was trap_handler (SIGCHLD) but that can lose traps if
32
+! 	     children_exited > 1 */
33
+! 	  queue_sigchld_trap (children_exited);
34
+  	  wait_signal_received = SIGCHLD;
35
+  	  /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
36
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
37
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
38
+***************
39
+*** 26,30 ****
40
+     looks for to find the patch level (for the sccs version string). */
41
+  
42
+! #define PATCHLEVEL 31
43
+  
44
+  #endif /* _PATCHLEVEL_H_ */
45
+--- 26,30 ----
46
+     looks for to find the patch level (for the sccs version string). */
47
+  
48
+! #define PATCHLEVEL 32
49
+  
50
+  #endif /* _PATCHLEVEL_H_ */
0 51
new file mode 100644
... ...
@@ -0,0 +1,225 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-033
5
+
6
+Bug-Reported-by:	mickael9@gmail.com, Jan Rome <jan.rome@gmail.com>
7
+Bug-Reference-ID:	<20140907224046.382ED3610CC@mickael-laptop.localdomain>,
8
+			<540D661D.50908@gmail.com>
9
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00029.html
10
+			http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00030.html
11
+
12
+Bug-Description:
13
+
14
+Bash does not clean up the terminal state in all cases where bash or
15
+readline  modifies it and bash is subsequently terminated by a fatal signal.
16
+This happens when the `read' builtin modifies the terminal settings, both
17
+when readline is active and when it is not.  It occurs most often when a script
18
+installs a trap that exits on a signal without re-sending the signal to itself.
19
+
20
+Patch (apply with `patch -p0'):
21
+
22
+*** ../bash-4.3-patched/shell.c	2014-01-14 08:04:32.000000000 -0500
23
+--- shell.c	2014-12-22 10:27:50.000000000 -0500
24
+***************
25
+*** 74,77 ****
26
+--- 74,78 ----
27
+  
28
+  #if defined (READLINE)
29
++ #  include <readline/readline.h>
30
+  #  include "bashline.h"
31
+  #endif
32
+***************
33
+*** 910,913 ****
34
+--- 912,923 ----
35
+    fflush (stderr);
36
+  
37
++   /* Clean up the terminal if we are in a state where it's been modified. */
38
++ #if defined (READLINE)
39
++   if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
40
++     (*rl_deprep_term_function) ();
41
++ #endif
42
++   if (read_tty_modified ())
43
++     read_tty_cleanup ();
44
++ 
45
+    /* Do trap[0] if defined.  Allow it to override the exit status
46
+       passed to us. */
47
+*** ../bash-4.3-patched/builtins/read.def	2014-10-01 12:57:38.000000000 -0400
48
+--- builtins/read.def	2014-12-22 10:48:54.000000000 -0500
49
+***************
50
+*** 141,148 ****
51
+  int sigalrm_seen;
52
+  
53
+! static int reading;
54
+  static SigHandler *old_alrm;
55
+  static unsigned char delim;
56
+  
57
+  /* In all cases, SIGALRM just sets a flag that we check periodically.  This
58
+     avoids problems with the semi-tricky stuff we do with the xfree of
59
+--- 141,150 ----
60
+  int sigalrm_seen;
61
+  
62
+! static int reading, tty_modified;
63
+  static SigHandler *old_alrm;
64
+  static unsigned char delim;
65
+  
66
++ static struct ttsave termsave;
67
++ 
68
+  /* In all cases, SIGALRM just sets a flag that we check periodically.  This
69
+     avoids problems with the semi-tricky stuff we do with the xfree of
70
+***************
71
+*** 189,193 ****
72
+    SHELL_VAR *var;
73
+    TTYSTRUCT ttattrs, ttset;
74
+-   struct ttsave termsave;
75
+  #if defined (ARRAY_VARS)
76
+    WORD_LIST *alist;
77
+--- 191,194 ----
78
+***************
79
+*** 222,226 ****
80
+    USE_VAR(lastsig);
81
+  
82
+!   sigalrm_seen = reading = 0;
83
+  
84
+    i = 0;		/* Index into the string that we are reading. */
85
+--- 223,227 ----
86
+    USE_VAR(lastsig);
87
+  
88
+!   sigalrm_seen = reading = tty_modified = 0;
89
+  
90
+    i = 0;		/* Index into the string that we are reading. */
91
+***************
92
+*** 439,442 ****
93
+--- 440,445 ----
94
+  	  goto assign_vars;
95
+  	}
96
++       if (interactive_shell == 0)
97
++ 	initialize_terminating_signals ();
98
+        old_alrm = set_signal_handler (SIGALRM, sigalrm);
99
+        add_unwind_protect (reset_alarm, (char *)NULL);
100
+***************
101
+*** 483,487 ****
102
+--- 486,493 ----
103
+  	  if (i < 0)
104
+  	    sh_ttyerror (1);
105
++ 	  tty_modified = 1;
106
+  	  add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
107
++ 	  if (interactive_shell == 0)
108
++ 	    initialize_terminating_signals ();
109
+  	}
110
+      }
111
+***************
112
+*** 498,502 ****
113
+--- 504,511 ----
114
+  	sh_ttyerror (1);
115
+  
116
++       tty_modified = 1;
117
+        add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
118
++       if (interactive_shell == 0)
119
++ 	initialize_terminating_signals ();
120
+      }
121
+  
122
+***************
123
+*** 589,592 ****
124
+--- 598,603 ----
125
+  	  else
126
+  	    lastsig = 0;
127
++ 	  if (terminating_signal && tty_modified)
128
++ 	    ttyrestore (&termsave);	/* fix terminal before exiting */
129
+  	  CHECK_TERMSIG;
130
+  	  eof = 1;
131
+***************
132
+*** 979,982 ****
133
+--- 990,1007 ----
134
+  {
135
+    ttsetattr (ttp->fd, ttp->attrs);
136
++   tty_modified = 0;
137
++ }
138
++ 
139
++ void
140
++ read_tty_cleanup ()
141
++ {
142
++   if (tty_modified)
143
++     ttyrestore (&termsave);
144
++ }
145
++ 
146
++ int
147
++ read_tty_modified ()
148
++ {
149
++   return (tty_modified);
150
+  }
151
+  
152
+*** ../bash-4.3-patched/builtins/common.h	2014-10-01 12:57:47.000000000 -0400
153
+--- builtins/common.h	2014-12-22 10:10:14.000000000 -0500
154
+***************
155
+*** 123,126 ****
156
+--- 141,148 ----
157
+  extern void getopts_reset __P((int));
158
+  
159
++ /* Functions from read.def */
160
++ extern void read_tty_cleanup __P((void));
161
++ extern int read_tty_modified __P((void));
162
++ 
163
+  /* Functions from set.def */
164
+  extern int minus_o_option_value __P((char *));
165
+*** ../bash-4.3-patched/bashline.c	2014-05-14 09:22:39.000000000 -0400
166
+--- bashline.c	2014-09-08 11:28:56.000000000 -0400
167
+***************
168
+*** 203,206 ****
169
+--- 203,207 ----
170
+  extern int array_needs_making;
171
+  extern int posixly_correct, no_symbolic_links;
172
++ extern int sigalrm_seen;
173
+  extern char *current_prompt_string, *ps1_prompt;
174
+  extern STRING_INT_ALIST word_token_alist[];
175
+***************
176
+*** 4209,4214 ****
177
+    /* If we're going to longjmp to top_level, make sure we clean up readline.
178
+       check_signals will call QUIT, which will eventually longjmp to top_level,
179
+!      calling run_interrupt_trap along the way. */
180
+!   if (interrupt_state)
181
+      rl_cleanup_after_signal ();
182
+    bashline_reset_event_hook ();
183
+--- 4262,4268 ----
184
+    /* If we're going to longjmp to top_level, make sure we clean up readline.
185
+       check_signals will call QUIT, which will eventually longjmp to top_level,
186
+!      calling run_interrupt_trap along the way.  The check for sigalrm_seen is
187
+!      to clean up the read builtin's state. */
188
+!   if (terminating_signal || interrupt_state || sigalrm_seen)
189
+      rl_cleanup_after_signal ();
190
+    bashline_reset_event_hook ();
191
+*** ../bash-4.3-patched/sig.c	2014-01-10 15:06:06.000000000 -0500
192
+--- sig.c	2014-09-08 11:26:33.000000000 -0400
193
+***************
194
+*** 533,538 ****
195
+    /* Set the event hook so readline will call it after the signal handlers
196
+       finish executing, so if this interrupted character input we can get
197
+!      quick response. */
198
+!   if (interactive_shell && interactive && no_line_editing == 0)
199
+      bashline_set_event_hook ();
200
+  #endif
201
+--- 533,540 ----
202
+    /* Set the event hook so readline will call it after the signal handlers
203
+       finish executing, so if this interrupted character input we can get
204
+!      quick response.  If readline is active or has modified the terminal we
205
+!      need to set this no matter what the signal is, though the check for
206
+!      RL_STATE_TERMPREPPED is possibly redundant. */
207
+!   if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED))
208
+      bashline_set_event_hook ();
209
+  #endif
210
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
211
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
212
+***************
213
+*** 26,30 ****
214
+     looks for to find the patch level (for the sccs version string). */
215
+  
216
+! #define PATCHLEVEL 32
217
+  
218
+  #endif /* _PATCHLEVEL_H_ */
219
+--- 26,30 ----
220
+     looks for to find the patch level (for the sccs version string). */
221
+  
222
+! #define PATCHLEVEL 33
223
+  
224
+  #endif /* _PATCHLEVEL_H_ */
0 225
new file mode 100644
... ...
@@ -0,0 +1,90 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-034
5
+
6
+Bug-Reported-by:	Dreamcat4 <dreamcat4@gmail.com>
7
+Bug-Reference-ID:	<CAN39uTpAEs2GFu4ebC_SfSVMRTh-DJ9YanrY4BZZ3OO+CCHjng@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-05/msg00001.html
9
+
10
+Bug-Description:
11
+
12
+If neither the -f nor -v options is supplied to unset, and a name argument is
13
+found to be a function and unset, subsequent name arguments are not treated as
14
+variables before attempting to unset a function by that name.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/builtins/set.def	2013-04-19 07:20:34.000000000 -0400
19
+--- builtins/set.def	2015-05-05 13:25:36.000000000 -0400
20
+***************
21
+*** 752,758 ****
22
+--- 797,805 ----
23
+  {
24
+    int unset_function, unset_variable, unset_array, opt, nameref, any_failed;
25
++   int global_unset_func, global_unset_var;
26
+    char *name;
27
+  
28
+    unset_function = unset_variable = unset_array = nameref = any_failed = 0;
29
++   global_unset_func = global_unset_var = 0;
30
+  
31
+    reset_internal_getopt ();
32
+***************
33
+*** 762,769 ****
34
+  	{
35
+  	case 'f':
36
+! 	  unset_function = 1;
37
+  	  break;
38
+  	case 'v':
39
+! 	  unset_variable = 1;
40
+  	  break;
41
+  	case 'n':
42
+--- 809,816 ----
43
+  	{
44
+  	case 'f':
45
+! 	  global_unset_func = 1;
46
+  	  break;
47
+  	case 'v':
48
+! 	  global_unset_var = 1;
49
+  	  break;
50
+  	case 'n':
51
+***************
52
+*** 778,782 ****
53
+    list = loptend;
54
+  
55
+!   if (unset_function && unset_variable)
56
+      {
57
+        builtin_error (_("cannot simultaneously unset a function and a variable"));
58
+--- 825,829 ----
59
+    list = loptend;
60
+  
61
+!   if (global_unset_func && global_unset_var)
62
+      {
63
+        builtin_error (_("cannot simultaneously unset a function and a variable"));
64
+***************
65
+*** 796,799 ****
66
+--- 843,849 ----
67
+        name = list->word->word;
68
+  
69
++       unset_function = global_unset_func;
70
++       unset_variable = global_unset_var;
71
++ 
72
+  #if defined (ARRAY_VARS)
73
+        unset_array = 0;
74
+
75
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
76
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
77
+***************
78
+*** 26,30 ****
79
+     looks for to find the patch level (for the sccs version string). */
80
+  
81
+! #define PATCHLEVEL 33
82
+  
83
+  #endif /* _PATCHLEVEL_H_ */
84
+--- 26,30 ----
85
+     looks for to find the patch level (for the sccs version string). */
86
+  
87
+! #define PATCHLEVEL 34
88
+  
89
+  #endif /* _PATCHLEVEL_H_ */
0 90
new file mode 100644
... ...
@@ -0,0 +1,63 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-035
5
+
6
+Bug-Reported-by:	<romerox.adrian@gmail.com>
7
+Bug-Reference-ID:	<CABV5r3zhPXmSKUe9uedeGc5YFBM2njJ1iVmY2h5neWdQpDBQug@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00045.html
9
+
10
+Bug-Description:
11
+
12
+A locale with a long name can trigger a buffer overflow and core dump.  This
13
+applies on systems that do not have locale_charset in libc, are not using
14
+GNU libiconv, and are not using the libintl that ships with bash in lib/intl.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/lib/sh/unicode.c	2014-01-30 16:47:19.000000000 -0500
19
+--- lib/sh/unicode.c	2015-05-01 08:58:30.000000000 -0400
20
+***************
21
+*** 79,83 ****
22
+    if (s)
23
+      {
24
+!       strcpy (charsetbuf, s+1);
25
+        t = strchr (charsetbuf, '@');
26
+        if (t)
27
+--- 79,84 ----
28
+    if (s)
29
+      {
30
+!       strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1);
31
+!       charsetbuf[sizeof (charsetbuf) - 1] = '\0';
32
+        t = strchr (charsetbuf, '@');
33
+        if (t)
34
+***************
35
+*** 85,89 ****
36
+        return charsetbuf;
37
+      }
38
+!   strcpy (charsetbuf, locale);
39
+    return charsetbuf;
40
+  }
41
+--- 86,91 ----
42
+        return charsetbuf;
43
+      }
44
+!   strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1);
45
+!   charsetbuf[sizeof (charsetbuf) - 1] = '\0';
46
+    return charsetbuf;
47
+  }
48
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
49
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
50
+***************
51
+*** 26,30 ****
52
+     looks for to find the patch level (for the sccs version string). */
53
+  
54
+! #define PATCHLEVEL 34
55
+  
56
+  #endif /* _PATCHLEVEL_H_ */
57
+--- 26,30 ----
58
+     looks for to find the patch level (for the sccs version string). */
59
+  
60
+! #define PATCHLEVEL 35
61
+  
62
+  #endif /* _PATCHLEVEL_H_ */
0 63
new file mode 100644
... ...
@@ -0,0 +1,57 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-036
5
+
6
+Bug-Reported-by:	emanuelczirai@cryptolab.net
7
+Bug-Reference-ID:	<f962e4f556da5ebfadaf7afe9c78a8cb@cryptolab.net>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00071.html
9
+
10
+Bug-Description:
11
+
12
+When evaluating and setting integer variables, and the assignment fails to
13
+create a variable (for example, when performing an operation on an array
14
+variable with an invalid subscript), bash attempts to dereference a null
15
+pointer, causing a segmentation violation.
16
+
17
+Patch (apply with `patch -p0'):
18
+
19
+*** ../bash-20150206/variables.c	2015-01-23 20:39:27.000000000 -0500
20
+--- variables.c	2015-02-19 13:56:12.000000000 -0500
21
+***************
22
+*** 2834,2841 ****
23
+      v = bind_variable (lhs, rhs, 0);
24
+  
25
+!   if (v && isint)
26
+!     VSETATTR (v, att_integer);
27
+! 
28
+!   VUNSETATTR (v, att_invisible);
29
+  
30
+    return (v);
31
+--- 2834,2843 ----
32
+      v = bind_variable (lhs, rhs, 0);
33
+  
34
+!   if (v)
35
+!     {
36
+!       if (isint)
37
+! 	VSETATTR (v, att_integer);
38
+!       VUNSETATTR (v, att_invisible);
39
+!     }
40
+  
41
+    return (v);
42
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
43
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
44
+***************
45
+*** 26,30 ****
46
+     looks for to find the patch level (for the sccs version string). */
47
+  
48
+! #define PATCHLEVEL 35
49
+  
50
+  #endif /* _PATCHLEVEL_H_ */
51
+--- 26,30 ----
52
+     looks for to find the patch level (for the sccs version string). */
53
+  
54
+! #define PATCHLEVEL 36
55
+  
56
+  #endif /* _PATCHLEVEL_H_ */
0 57
new file mode 100644
... ...
@@ -0,0 +1,43 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-037
5
+
6
+Bug-Reported-by:	Greg Wooledge <wooledg@eeg.ccf.org>
7
+Bug-Reference-ID:	<20150204144240.GN13956@eeg.ccf.org>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00007.html
9
+
10
+Bug-Description:
11
+
12
+If an associative array uses `@' or `*' as a subscript, `declare -p' produces
13
+output that cannot be reused as input.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/assoc.c	2011-11-05 16:39:05.000000000 -0400
18
+--- assoc.c	2015-02-04 15:28:25.000000000 -0500
19
+***************
20
+*** 437,440 ****
21
+--- 440,445 ----
22
+  	if (sh_contains_shell_metas (tlist->key))
23
+  	  istr = sh_double_quote (tlist->key);
24
++ 	else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0')
25
++ 	  istr = sh_double_quote (tlist->key);	
26
+  	else
27
+  	  istr = tlist->key;	
28
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
29
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
30
+***************
31
+*** 26,30 ****
32
+     looks for to find the patch level (for the sccs version string). */
33
+  
34
+! #define PATCHLEVEL 36
35
+  
36
+  #endif /* _PATCHLEVEL_H_ */
37
+--- 26,30 ----
38
+     looks for to find the patch level (for the sccs version string). */
39
+  
40
+! #define PATCHLEVEL 37
41
+  
42
+  #endif /* _PATCHLEVEL_H_ */
0 43
new file mode 100644
... ...
@@ -0,0 +1,88 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-038
5
+
6
+Bug-Reported-by:	worley@alum.mit.edu (Dale R. Worley)
7
+Bug-Reference-ID:	<201406100051.s5A0pCeB014978@hobgoblin.ariadne.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00028.html
9
+
10
+Bug-Description:
11
+
12
+There are a number of instances where `time' is not recognized as a reserved
13
+word when the shell grammar says it should be.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/parse.y	2014-04-07 11:56:12.000000000 -0400
18
+--- parse.y	2014-06-11 10:25:53.000000000 -0400
19
+***************
20
+*** 2819,2827 ****
21
+      case OR_OR:
22
+      case '&':
23
+      case DO:
24
+      case THEN:
25
+      case ELSE:
26
+      case '{':		/* } */
27
+!     case '(':		/* ) */
28
+      case BANG:		/* ! time pipeline */
29
+      case TIME:		/* time time pipeline */
30
+--- 2819,2832 ----
31
+      case OR_OR:
32
+      case '&':
33
++     case WHILE:
34
+      case DO:
35
++     case UNTIL:
36
++     case IF:
37
+      case THEN:
38
++     case ELIF:
39
+      case ELSE:
40
+      case '{':		/* } */
41
+!     case '(':		/* )( */
42
+!     case ')':		/* only valid in case statement */
43
+      case BANG:		/* ! time pipeline */
44
+      case TIME:		/* time time pipeline */
45
+*** ../bash-4.3-patched/y.tab.c	2014-10-05 13:52:50.000000000 -0400
46
+--- y.tab.c	2015-05-19 15:08:43.000000000 -0400
47
+***************
48
+*** 5131,5139 ****
49
+      case OR_OR:
50
+      case '&':
51
+      case DO:
52
+      case THEN:
53
+      case ELSE:
54
+      case '{':		/* } */
55
+!     case '(':		/* ) */
56
+      case BANG:		/* ! time pipeline */
57
+      case TIME:		/* time time pipeline */
58
+--- 5131,5144 ----
59
+      case OR_OR:
60
+      case '&':
61
++     case WHILE:
62
+      case DO:
63
++     case UNTIL:
64
++     case IF:
65
+      case THEN:
66
++     case ELIF:
67
+      case ELSE:
68
+      case '{':		/* } */
69
+!     case '(':		/* )( */
70
+!     case ')':		/* only valid in case statement */
71
+      case BANG:		/* ! time pipeline */
72
+      case TIME:		/* time time pipeline */
73
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
74
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
75
+***************
76
+*** 26,30 ****
77
+     looks for to find the patch level (for the sccs version string). */
78
+  
79
+! #define PATCHLEVEL 37
80
+  
81
+  #endif /* _PATCHLEVEL_H_ */
82
+--- 26,30 ----
83
+     looks for to find the patch level (for the sccs version string). */
84
+  
85
+! #define PATCHLEVEL 38
86
+  
87
+  #endif /* _PATCHLEVEL_H_ */
0 88
new file mode 100644
... ...
@@ -0,0 +1,57 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-039
5
+
6
+Bug-Reported-by:	SN <poczta-sn@gazeta.pl>
7
+Bug-Reference-ID:	<54E2554C.205@gazeta.pl>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00060.html
9
+
10
+Bug-Description:
11
+
12
+Using the output of `declare -p' when run in a function can result in variables
13
+that are invisible to `declare -p'.  This problem occurs when an assignment
14
+builtin such as `declare' receives a quoted compound array assignment as one of
15
+its arguments.
16
+
17
+Patch (apply with `patch -p0'):
18
+
19
+*** /usr/src/local/bash/bash-4.3-patched/arrayfunc.c	2014-10-01 13:08:48.000000000 -0400
20
+--- arrayfunc.c	2015-02-19 14:33:05.000000000 -0500
21
+***************
22
+*** 405,408 ****
23
+--- 405,411 ----
24
+      else
25
+        array_insert (a, i, l->word->word);
26
++ 
27
++   VUNSETATTR (var, att_invisible);	/* no longer invisible */
28
++ 
29
+    return var;
30
+  }
31
+***************
32
+*** 635,638 ****
33
+--- 638,645 ----
34
+    if (nlist)
35
+      dispose_words (nlist);
36
++ 
37
++   if (var)
38
++     VUNSETATTR (var, att_invisible);	/* no longer invisible */
39
++ 
40
+    return (var);
41
+  }
42
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
43
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
44
+***************
45
+*** 26,30 ****
46
+     looks for to find the patch level (for the sccs version string). */
47
+  
48
+! #define PATCHLEVEL 38
49
+  
50
+  #endif /* _PATCHLEVEL_H_ */
51
+--- 26,30 ----
52
+     looks for to find the patch level (for the sccs version string). */
53
+  
54
+! #define PATCHLEVEL 39
55
+  
56
+  #endif /* _PATCHLEVEL_H_ */
0 57
new file mode 100644
... ...
@@ -0,0 +1,47 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-040
5
+
6
+Bug-Reported-by:	Jean Delvare <jdelvare@suse.de>
7
+Bug-Reference-ID:	<20150609180231.5f463695@endymion.delvare>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00033.html
9
+
10
+Bug-Description:
11
+
12
+There is a memory leak that occurs when bash expands an array reference on
13
+the rhs of an assignment statement.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/subst.c	2014-10-01 12:57:47.000000000 -0400
18
+--- subst.c	2015-06-22 09:16:53.000000000 -0400
19
+***************
20
+*** 5783,5787 ****
21
+        if (pflags & PF_ASSIGNRHS)
22
+          {
23
+!           temp = array_variable_name (name, &tt, (int *)0);
24
+            if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']')
25
+  	    temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind);
26
+--- 5783,5787 ----
27
+        if (pflags & PF_ASSIGNRHS)
28
+          {
29
+!           var = array_variable_part (name, &tt, (int *)0);
30
+            if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']')
31
+  	    temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind);
32
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
33
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
34
+***************
35
+*** 26,30 ****
36
+     looks for to find the patch level (for the sccs version string). */
37
+  
38
+! #define PATCHLEVEL 39
39
+  
40
+  #endif /* _PATCHLEVEL_H_ */
41
+--- 26,30 ----
42
+     looks for to find the patch level (for the sccs version string). */
43
+  
44
+! #define PATCHLEVEL 40
45
+  
46
+  #endif /* _PATCHLEVEL_H_ */
0 47
new file mode 100644
... ...
@@ -0,0 +1,72 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-041
5
+
6
+Bug-Reported-by:	Hanno Böck <hanno@hboeck.de>
7
+Bug-Reference-ID:	<20150623131106.6f111da9@pc1>, <20150707004640.0e61d2f9@pc1>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00089.html,
9
+			http://lists.gnu.org/archive/html/bug-bash/2015-07/msg00018.html
10
+
11
+Bug-Description:
12
+
13
+There are several out-of-bounds read errors that occur when completing command
14
+lines where assignment statements appear before the command name.  The first
15
+two appear only when programmable completion is enabled; the last one only
16
+happens when listing possible completions.
17
+
18
+Patch (apply with `patch -p0'):
19
+
20
+*** ../bash-4.3.40/bashline.c	2014-12-29 14:39:43.000000000 -0500
21
+--- bashline.c	2015-08-12 10:21:58.000000000 -0400
22
+***************
23
+*** 1469,1476 ****
24
+--- 1469,1489 ----
25
+        os = start;
26
+        n = 0;
27
++       was_assignment = 0;
28
+        s = find_cmd_start (os);
29
+        e = find_cmd_end (end);
30
+        do
31
+  	{
32
++ 	  /* Don't read past the end of rl_line_buffer */
33
++ 	  if (s > rl_end)
34
++ 	    {
35
++ 	      s1 = s = e1;
36
++ 	      break;
37
++ 	    }
38
++ 	  /* Or past point if point is within an assignment statement */
39
++ 	  else if (was_assignment && s > rl_point)
40
++ 	    {
41
++ 	      s1 = s = e1;
42
++ 	      break;
43
++ 	    }
44
+  	  /* Skip over assignment statements preceding a command name.  If we
45
+  	     don't find a command name at all, we can perform command name
46
+*** ../bash-4.3.40/lib/readline/complete.c	2013-10-14 09:27:10.000000000 -0400
47
+--- lib/readline/complete.c	2015-07-31 09:34:39.000000000 -0400
48
+***************
49
+*** 690,693 ****
50
+--- 690,695 ----
51
+    if (temp == 0 || *temp == '\0')
52
+      return (pathname);
53
++   else if (temp[1] == 0 && temp == pathname)
54
++     return (pathname);
55
+    /* If the basename is NULL, we might have a pathname like '/usr/src/'.
56
+       Look for a previous slash and, if one is found, return the portion
57
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
58
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
59
+***************
60
+*** 26,30 ****
61
+     looks for to find the patch level (for the sccs version string). */
62
+  
63
+! #define PATCHLEVEL 40
64
+  
65
+  #endif /* _PATCHLEVEL_H_ */
66
+--- 26,30 ----
67
+     looks for to find the patch level (for the sccs version string). */
68
+  
69
+! #define PATCHLEVEL 41
70
+  
71
+  #endif /* _PATCHLEVEL_H_ */
0 72
new file mode 100644
... ...
@@ -0,0 +1,55 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-042
5
+
6
+Bug-Reported-by:	Nathan Neulinger <nneul@neulinger.org>
7
+Bug-Reference-ID:	<558EFDF2.7060402@neulinger.org>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00096.html
9
+
10
+Bug-Description:
11
+
12
+There is a problem when parsing command substitutions containing `case'
13
+commands within pipelines that causes the parser to not correctly identify
14
+the end of the command substitution.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** ../bash-4.3-patched/parse.y	2015-05-18 19:27:05.000000000 -0400
19
+--- parse.y	2015-06-29 10:59:27.000000000 -0400
20
+***************
21
+*** 3709,3712 ****
22
+--- 3709,3714 ----
23
+  	      tflags |= LEX_INWORD;
24
+  	      lex_wlen = 0;
25
++ 	      if (tflags & LEX_RESWDOK)
26
++ 		lex_rwlen = 0;
27
+  	    }
28
+  	}
29
+*** ../bash-4.3-patched/y.tab.c	2015-05-18 19:27:05.000000000 -0400
30
+--- y.tab.c	2015-06-29 10:59:27.000000000 -0400
31
+***************
32
+*** 6021,6024 ****
33
+--- 6021,6026 ----
34
+  	      tflags |= LEX_INWORD;
35
+  	      lex_wlen = 0;
36
++ 	      if (tflags & LEX_RESWDOK)
37
++ 		lex_rwlen = 0;
38
+  	    }
39
+  	}
40
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
41
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
42
+***************
43
+*** 26,30 ****
44
+     looks for to find the patch level (for the sccs version string). */
45
+  
46
+! #define PATCHLEVEL 41
47
+  
48
+  #endif /* _PATCHLEVEL_H_ */
49
+--- 26,30 ----
50
+     looks for to find the patch level (for the sccs version string). */
51
+  
52
+! #define PATCHLEVEL 42
53
+  
54
+  #endif /* _PATCHLEVEL_H_ */
0 55
new file mode 100644
... ...
@@ -0,0 +1,59 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-043
5
+
6
+Bug-Reported-by:	lolilolicon <lolilolicon@gmail.com>
7
+Bug-Reference-ID:	<CAMtVo_MF16KWanCB4C8WxA88Qt26zWsvV6V7+_U2fM0E6tCDxw@mail.gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00040.html
9
+
10
+Bug-Description:
11
+
12
+When the lastpipe option is enabled, the last component can contain nested
13
+pipelines and cause a segmentation fault under certain circumestances.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** ../bash-4.3-patched/execute_cmd.c	2014-07-30 10:26:52.000000000 -0400
18
+--- execute_cmd.c	2014-08-15 08:55:24.000000000 -0400
19
+***************
20
+*** 2406,2412 ****
21
+      {
22
+  #if defined (JOB_CONTROL)
23
+!       append_process (savestring (the_printed_command), dollar_dollar_pid, exec_result, lastpipe_jid);
24
+! #endif
25
+        lstdin = wait_for (lastpid);
26
+  #if defined (JOB_CONTROL)
27
+        /* If wait_for removes the job from the jobs table, use result of last
28
+--- 2433,2447 ----
29
+      {
30
+  #if defined (JOB_CONTROL)
31
+!       if (INVALID_JOB (lastpipe_jid) == 0)
32
+!         {
33
+!           append_process (savestring (the_printed_command_except_trap), dollar_dollar_pid, exec_result, lastpipe_jid);
34
+!           lstdin = wait_for (lastpid);
35
+!         }
36
+!       else
37
+!         lstdin = wait_for_single_pid (lastpid);		/* checks bgpids list */
38
+! #else
39
+        lstdin = wait_for (lastpid);
40
++ #endif
41
++ 
42
+  #if defined (JOB_CONTROL)
43
+        /* If wait_for removes the job from the jobs table, use result of last
44
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
45
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
46
+***************
47
+*** 26,30 ****
48
+     looks for to find the patch level (for the sccs version string). */
49
+  
50
+! #define PATCHLEVEL 42
51
+  
52
+  #endif /* _PATCHLEVEL_H_ */
53
+--- 26,30 ----
54
+     looks for to find the patch level (for the sccs version string). */
55
+  
56
+! #define PATCHLEVEL 43
57
+  
58
+  #endif /* _PATCHLEVEL_H_ */
0 59
new file mode 100644
... ...
@@ -0,0 +1,48 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-044
5
+
6
+Bug-Reported-by:	Ondrej Oprala <ooprala@redhat.com>
7
+Bug-Reference-ID:	<539ED55B.2080103@redhat.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00046.html
9
+
10
+Bug-Description:
11
+
12
+A typo prevents the `compat42' shopt option from working as intended.
13
+
14
+Patch (apply with `patch -p0'):
15
+
16
+diff -rC 2 bash-4.3.42/builtins/shopt.def bash-4.3.43/builtins/shopt.def
17
+*** bash-4.3.42/builtins/shopt.def	2013-02-27 09:43:20.000000000 -0500
18
+--- builtins/shopt.def	2015-10-16 11:25:28.000000000 -0400
19
+***************
20
+*** 161,165 ****
21
+    { "compat40", &shopt_compat40, set_compatibility_level },
22
+    { "compat41", &shopt_compat41, set_compatibility_level },
23
+!   { "compat42", &shopt_compat41, set_compatibility_level },
24
+  #if defined (READLINE)
25
+    { "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
26
+--- 161,165 ----
27
+    { "compat40", &shopt_compat40, set_compatibility_level },
28
+    { "compat41", &shopt_compat41, set_compatibility_level },
29
+!   { "compat42", &shopt_compat42, set_compatibility_level },
30
+  #if defined (READLINE)
31
+    { "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
32
+
33
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
34
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
35
+***************
36
+*** 26,30 ****
37
+     looks for to find the patch level (for the sccs version string). */
38
+  
39
+! #define PATCHLEVEL 43
40
+  
41
+  #endif /* _PATCHLEVEL_H_ */
42
+--- 26,30 ----
43
+     looks for to find the patch level (for the sccs version string). */
44
+  
45
+! #define PATCHLEVEL 44
46
+  
47
+  #endif /* _PATCHLEVEL_H_ */
0 48
new file mode 100644
... ...
@@ -0,0 +1,52 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-045
5
+
6
+Bug-Reported-by:	Basin Ilya <basinilya@gmail.com>
7
+Bug-Reference-ID:	<5624C0AC.8070802@gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-10/msg00141.html
9
+
10
+Bug-Description:
11
+
12
+If a file open attempted as part of a redirection fails because it is interrupted
13
+by a signal, the shell needs to process any pending traps to allow the redirection
14
+to be canceled.
15
+
16
+Patch (apply with `patch -p0'):
17
+
18
+*** bash-20150109/redir.c	2014-12-03 10:47:38.000000000 -0500
19
+--- redir.c	2015-01-16 10:15:47.000000000 -0500
20
+***************
21
+*** 672,676 ****
22
+  	  e = errno;
23
+  	  if (fd < 0 && e == EINTR)
24
+! 	    QUIT;
25
+  	  errno = e;
26
+  	}
27
+--- 672,679 ----
28
+  	  e = errno;
29
+  	  if (fd < 0 && e == EINTR)
30
+! 	    {
31
+! 	      QUIT;
32
+! 	      run_pending_traps ();
33
+! 	    }
34
+  	  errno = e;
35
+  	}
36
+
37
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
38
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
39
+***************
40
+*** 26,30 ****
41
+     looks for to find the patch level (for the sccs version string). */
42
+  
43
+! #define PATCHLEVEL 44
44
+  
45
+  #endif /* _PATCHLEVEL_H_ */
46
+--- 26,30 ----
47
+     looks for to find the patch level (for the sccs version string). */
48
+  
49
+! #define PATCHLEVEL 45
50
+  
51
+  #endif /* _PATCHLEVEL_H_ */
0 52
new file mode 100644
... ...
@@ -0,0 +1,55 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-046
5
+
6
+Bug-Reported-by:	Sergey Tselikh <stselikh@gmail.com>
7
+Bug-Reference-ID:	<20150816110235.91f3e12e3f20d20cdaad963e@gmail.com>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-08/msg00080.html
9
+
10
+Bug-Description:
11
+
12
+An incorrect conversion from an indexed to associative array can result in a
13
+core dump.
14
+
15
+Patch (apply with `patch -p0'):
16
+
17
+*** /fs2/chet/bash/bash-20150813/subst.c	2015-08-13 11:32:54.000000000 -0400
18
+--- subst.c	2015-08-18 10:13:59.000000000 -0400
19
+***************
20
+*** 9562,9566 ****
21
+  	  opts[opti] = '\0';
22
+  	  if (opti > 0)
23
+! 	    make_internal_declare (tlist->word->word, opts);
24
+  
25
+  	  t = do_word_assignment (tlist->word, 0);
26
+--- 9562,9573 ----
27
+  	  opts[opti] = '\0';
28
+  	  if (opti > 0)
29
+! 	    {
30
+! 	      t = make_internal_declare (tlist->word->word, opts);
31
+! 	      if (t != EXECUTION_SUCCESS)
32
+! 		{
33
+! 		  last_command_exit_value = t;
34
+! 		  exp_jump_to_top_level (DISCARD);
35
+! 		}
36
+! 	    }
37
+  
38
+  	  t = do_word_assignment (tlist->word, 0);
39
+
40
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
41
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
42
+***************
43
+*** 26,30 ****
44
+     looks for to find the patch level (for the sccs version string). */
45
+  
46
+! #define PATCHLEVEL 45
47
+  
48
+  #endif /* _PATCHLEVEL_H_ */
49
+--- 26,30 ----
50
+     looks for to find the patch level (for the sccs version string). */
51
+  
52
+! #define PATCHLEVEL 46
53
+  
54
+  #endif /* _PATCHLEVEL_H_ */
0 55
new file mode 100644
... ...
@@ -0,0 +1,150 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-047
5
+
6
+Bug-Reported-by:	Bernd Dietzel
7
+Bug-Reference-ID:
8
+Bug-Reference-URL:	https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1507025
9
+
10
+Bug-Description:
11
+
12
+Bash performs word expansions on the prompt strings after the special
13
+escape sequences are expanded.  If a malicious user can modify the system
14
+hostname or change the name of the bash executable and coerce a user into
15
+executing it, and the new name contains word expansions (including
16
+command substitution), bash will expand them in prompt strings containing
17
+the \h or \H and \s escape sequences, respectively.
18
+
19
+Patch (apply with `patch -p0'):
20
+
21
+*** ../bash-4.3-patched/parse.y	2015-08-13 15:11:54.000000000 -0400
22
+--- parse.y	2016-03-07 15:44:14.000000000 -0500
23
+***************
24
+*** 5259,5263 ****
25
+    int result_size, result_index;
26
+    int c, n, i;
27
+!   char *temp, octal_string[4];
28
+    struct tm *tm;  
29
+    time_t the_time;
30
+--- 5259,5263 ----
31
+    int result_size, result_index;
32
+    int c, n, i;
33
+!   char *temp, *t_host, octal_string[4];
34
+    struct tm *tm;  
35
+    time_t the_time;
36
+***************
37
+*** 5407,5411 ****
38
+  	    case 's':
39
+  	      temp = base_pathname (shell_name);
40
+! 	      temp = savestring (temp);
41
+  	      goto add_string;
42
+  
43
+--- 5407,5415 ----
44
+  	    case 's':
45
+  	      temp = base_pathname (shell_name);
46
+! 	      /* Try to quote anything the user can set in the file system */
47
+! 	      if (promptvars || posixly_correct)
48
+! 		temp = sh_backslash_quote_for_double_quotes (temp);
49
+! 	      else
50
+! 		temp = savestring (temp);
51
+  	      goto add_string;
52
+  
53
+***************
54
+*** 5497,5503 ****
55
+  	    case 'h':
56
+  	    case 'H':
57
+! 	      temp = savestring (current_host_name);
58
+! 	      if (c == 'h' && (t = (char *)strchr (temp, '.')))
59
+  		*t = '\0';
60
+  	      goto add_string;
61
+  
62
+--- 5501,5515 ----
63
+  	    case 'h':
64
+  	    case 'H':
65
+! 	      t_host = savestring (current_host_name);
66
+! 	      if (c == 'h' && (t = (char *)strchr (t_host, '.')))
67
+  		*t = '\0';
68
++ 	      if (promptvars || posixly_correct)
69
++ 		/* Make sure that expand_prompt_string is called with a
70
++ 		   second argument of Q_DOUBLE_QUOTES if we use this
71
++ 		   function here. */
72
++ 		temp = sh_backslash_quote_for_double_quotes (t_host);
73
++ 	      else
74
++ 		temp = savestring (t_host);
75
++ 	      free (t_host);
76
+  	      goto add_string;
77
+  
78
+*** ../bash-4.3-patched/y.tab.c	2015-08-13 15:11:54.000000000 -0400
79
+--- y.tab.c	2016-03-07 15:44:14.000000000 -0500
80
+***************
81
+*** 7571,7575 ****
82
+    int result_size, result_index;
83
+    int c, n, i;
84
+!   char *temp, octal_string[4];
85
+    struct tm *tm;  
86
+    time_t the_time;
87
+--- 7571,7575 ----
88
+    int result_size, result_index;
89
+    int c, n, i;
90
+!   char *temp, *t_host, octal_string[4];
91
+    struct tm *tm;  
92
+    time_t the_time;
93
+***************
94
+*** 7719,7723 ****
95
+  	    case 's':
96
+  	      temp = base_pathname (shell_name);
97
+! 	      temp = savestring (temp);
98
+  	      goto add_string;
99
+  
100
+--- 7719,7727 ----
101
+  	    case 's':
102
+  	      temp = base_pathname (shell_name);
103
+! 	      /* Try to quote anything the user can set in the file system */
104
+! 	      if (promptvars || posixly_correct)
105
+! 		temp = sh_backslash_quote_for_double_quotes (temp);
106
+! 	      else
107
+! 		temp = savestring (temp);
108
+  	      goto add_string;
109
+  
110
+***************
111
+*** 7809,7815 ****
112
+  	    case 'h':
113
+  	    case 'H':
114
+! 	      temp = savestring (current_host_name);
115
+! 	      if (c == 'h' && (t = (char *)strchr (temp, '.')))
116
+  		*t = '\0';
117
+  	      goto add_string;
118
+  
119
+--- 7813,7827 ----
120
+  	    case 'h':
121
+  	    case 'H':
122
+! 	      t_host = savestring (current_host_name);
123
+! 	      if (c == 'h' && (t = (char *)strchr (t_host, '.')))
124
+  		*t = '\0';
125
++ 	      if (promptvars || posixly_correct)
126
++ 		/* Make sure that expand_prompt_string is called with a
127
++ 		   second argument of Q_DOUBLE_QUOTES if we use this
128
++ 		   function here. */
129
++ 		temp = sh_backslash_quote_for_double_quotes (t_host);
130
++ 	      else
131
++ 		temp = savestring (t_host);
132
++ 	      free (t_host);
133
+  	      goto add_string;
134
+  
135
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
136
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
137
+***************
138
+*** 26,30 ****
139
+     looks for to find the patch level (for the sccs version string). */
140
+  
141
+! #define PATCHLEVEL 46
142
+  
143
+  #endif /* _PATCHLEVEL_H_ */
144
+--- 26,30 ----
145
+     looks for to find the patch level (for the sccs version string). */
146
+  
147
+! #define PATCHLEVEL 47
148
+  
149
+  #endif /* _PATCHLEVEL_H_ */
0 150
new file mode 100644
... ...
@@ -0,0 +1,54 @@
0
+			     BASH PATCH REPORT
1
+			     =================
2
+
3
+Bash-Release:	4.3
4
+Patch-ID:	bash43-048
5
+
6
+Bug-Reported-by:	up201407890@alunos.dcc.fc.up.pt
7
+Bug-Reference-ID:	<20151210201649.126444eionzfsam8@webmail.alunos.dcc.fc.up.pt>
8
+Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2015-12/msg00054.html
9
+
10
+Bug-Description:
11
+
12
+If a malicious user can inject a value of $SHELLOPTS containing `xtrace'
13
+and a value for $PS4 that includes a command substitution into a shell
14
+running as root, bash will expand the command substitution as part of
15
+expanding $PS4 when it executes a traced command.
16
+
17
+Patch (apply with `patch -p0'):
18
+
19
+*** ../bash-4.3-patched/variables.c	2015-11-26 12:31:21.000000000 -0500
20
+--- variables.c	2015-12-23 10:19:01.000000000 -0500
21
+***************
22
+*** 496,500 ****
23
+        set_if_not ("PS2", secondary_prompt);
24
+      }
25
+!   set_if_not ("PS4", "+ ");
26
+  
27
+    /* Don't allow IFS to be imported from the environment. */
28
+--- 496,504 ----
29
+        set_if_not ("PS2", secondary_prompt);
30
+      }
31
+! 
32
+!   if (current_user.euid == 0)
33
+!     bind_variable ("PS4", "+ ", 0);
34
+!   else
35
+!     set_if_not ("PS4", "+ ");
36
+  
37
+    /* Don't allow IFS to be imported from the environment. */
38
+
39
+*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
40
+--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
41
+***************
42
+*** 26,30 ****
43
+     looks for to find the patch level (for the sccs version string). */
44
+  
45
+! #define PATCHLEVEL 47
46
+  
47
+  #endif /* _PATCHLEVEL_H_ */
48
+--- 26,30 ----
49
+     looks for to find the patch level (for the sccs version string). */
50
+  
51
+! #define PATCHLEVEL 48
52
+  
53
+  #endif /* _PATCHLEVEL_H_ */