First Commit
[librecmc/package-feed.git] / utils / bash / patches / 130-upstream-bash43-030.patch
1                              BASH PATCH REPORT
2                              =================
3
4 Bash-Release:   4.3
5 Patch-ID:       bash43-030
6
7 Bug-Reported-by:        Michal Zalewski <lcamtuf@coredump.cx>
8 Bug-Reference-ID:
9 Bug-Reference-URL:
10
11 Bug-Description:
12
13 A combination of nested command substitutions and function importing from
14 the environment can cause bash to execute code appearing in the environment
15 variable value following the function definition.
16
17 Patch (apply with `patch -p0'):
18
19 --- a/builtins/evalstring.c
20 +++ b/builtins/evalstring.c
21 @@ -308,12 +308,25 @@ parse_and_execute (string, from_file, fl
22             {
23               struct fd_bitmap *bitmap;
24  
25 -             if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def)
26 +             if (flags & SEVAL_FUNCDEF)
27                 {
28 -                 internal_warning ("%s: ignoring function definition attempt", from_file);
29 -                 should_jump_to_top_level = 0;
30 -                 last_result = last_command_exit_value = EX_BADUSAGE;
31 -                 break;
32 +                 char *x;
33 +
34 +                 /* If the command parses to something other than a straight
35 +                    function definition, or if we have not consumed the entire
36 +                    string, or if the parser has transformed the function
37 +                    name (as parsing will if it begins or ends with shell
38 +                    whitespace, for example), reject the attempt */
39 +                 if (command->type != cm_function_def ||
40 +                     ((x = parser_remaining_input ()) && *x) ||
41 +                     (STREQ (from_file, command->value.Function_def->name->word) == 0))
42 +                   {
43 +                     internal_warning (_("%s: ignoring function definition attempt"), from_file);
44 +                     should_jump_to_top_level = 0;
45 +                     last_result = last_command_exit_value = EX_BADUSAGE;
46 +                     reset_parser ();
47 +                     break;
48 +                   }
49                 }
50  
51               bitmap = new_fd_bitmap (FD_BITMAP_SIZE);
52 @@ -378,7 +391,10 @@ parse_and_execute (string, from_file, fl
53               discard_unwind_frame ("pe_dispose");
54  
55               if (flags & SEVAL_ONECMD)
56 -               break;
57 +               {
58 +                 reset_parser ();
59 +                 break;
60 +               }
61             }
62         }
63        else
64 --- a/parse.y
65 +++ b/parse.y
66 @@ -2538,6 +2538,16 @@ shell_ungetc (c)
67      eol_ungetc_lookahead = c;
68  }
69  
70 +char *
71 +parser_remaining_input ()
72 +{
73 +  if (shell_input_line == 0)
74 +    return 0;
75 +  if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
76 +    return '\0';       /* XXX */
77 +  return (shell_input_line + shell_input_line_index);
78 +}
79 +
80  #ifdef INCLUDE_UNUSED
81  /* Back the input pointer up by one, effectively `ungetting' a character. */
82  static void
83 @@ -4027,8 +4037,8 @@ xparse_dolparen (base, string, indp, fla
84    reset_parser ();
85    /* reset_parser clears shell_input_line and associated variables */
86    restore_input_line_state (&ls);
87 -  if (interactive)
88 -    token_to_read = 0;
89 +
90 +  token_to_read = 0;
91  
92    /* Need to find how many characters parse_and_execute consumed, update
93       *indp, if flags != 0, copy the portion of the string parsed into RET
94 --- a/shell.h
95 +++ b/shell.h
96 @@ -180,6 +180,8 @@ typedef struct _sh_input_line_state_t {
97  } sh_input_line_state_t;
98  
99  /* Let's try declaring these here. */
100 +extern char *parser_remaining_input __P((void));
101 +
102  extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
103  extern void restore_parser_state __P((sh_parser_state_t *));
104  
105 --- a/y.tab.c
106 +++ b/y.tab.c
107 @@ -168,7 +168,7 @@
108  
109  
110  /* Copy the first part of user declarations.  */
111 -#line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
112 +#line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y"
113  
114  #include "config.h"
115  
116 @@ -497,7 +497,7 @@ static REDIRECTEE redir;
117  
118  #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
119  typedef union YYSTYPE
120 -#line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
121 +#line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y"
122  {
123    WORD_DESC *word;             /* the word that we read. */
124    int number;                  /* the number that we read. */
125 @@ -2098,7 +2098,7 @@ yyreduce:
126    switch (yyn)
127      {
128          case 2:
129 -#line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
130 +#line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y"
131      {
132                           /* Case of regular command.  Discard the error
133                              safety net,and return the command just parsed. */
134 @@ -2112,7 +2112,7 @@ yyreduce:
135      break;
136  
137    case 3:
138 -#line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
139 +#line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y"
140      {
141                           /* Case of regular command, but not a very
142                              interesting one.  Return a NULL command. */
143 @@ -2124,7 +2124,7 @@ yyreduce:
144      break;
145  
146    case 4:
147 -#line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
148 +#line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y"
149      {
150                           /* Error during parsing.  Return NULL command. */
151                           global_command = (COMMAND *)NULL;
152 @@ -2142,7 +2142,7 @@ yyreduce:
153      break;
154  
155    case 5:
156 -#line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
157 +#line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y"
158      {
159                           /* Case of EOF seen by itself.  Do ignoreeof or
160                              not. */
161 @@ -2153,17 +2153,17 @@ yyreduce:
162      break;
163  
164    case 6:
165 -#line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
166 +#line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y"
167      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
168      break;
169  
170    case 7:
171 -#line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
172 +#line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y"
173      { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); }
174      break;
175  
176    case 8:
177 -#line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
178 +#line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y"
179      {
180                           source.dest = 1;
181                           redir.filename = (yyvsp[(2) - (2)].word);
182 @@ -2172,7 +2172,7 @@ yyreduce:
183      break;
184  
185    case 9:
186 -#line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
187 +#line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y"
188      {
189                           source.dest = 0;
190                           redir.filename = (yyvsp[(2) - (2)].word);
191 @@ -2181,7 +2181,7 @@ yyreduce:
192      break;
193  
194    case 10:
195 -#line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
196 +#line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y"
197      {
198                           source.dest = (yyvsp[(1) - (3)].number);
199                           redir.filename = (yyvsp[(3) - (3)].word);
200 @@ -2190,7 +2190,7 @@ yyreduce:
201      break;
202  
203    case 11:
204 -#line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
205 +#line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y"
206      {
207                           source.dest = (yyvsp[(1) - (3)].number);
208                           redir.filename = (yyvsp[(3) - (3)].word);
209 @@ -2199,7 +2199,7 @@ yyreduce:
210      break;
211  
212    case 12:
213 -#line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
214 +#line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y"
215      {
216                           source.filename = (yyvsp[(1) - (3)].word);
217                           redir.filename = (yyvsp[(3) - (3)].word);
218 @@ -2208,7 +2208,7 @@ yyreduce:
219      break;
220  
221    case 13:
222 -#line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
223 +#line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y"
224      {
225                           source.filename = (yyvsp[(1) - (3)].word);
226                           redir.filename = (yyvsp[(3) - (3)].word);
227 @@ -2217,7 +2217,7 @@ yyreduce:
228      break;
229  
230    case 14:
231 -#line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
232 +#line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y"
233      {
234                           source.dest = 1;
235                           redir.filename = (yyvsp[(2) - (2)].word);
236 @@ -2226,7 +2226,7 @@ yyreduce:
237      break;
238  
239    case 15:
240 -#line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
241 +#line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y"
242      {
243                           source.dest = (yyvsp[(1) - (3)].number);
244                           redir.filename = (yyvsp[(3) - (3)].word);
245 @@ -2235,7 +2235,7 @@ yyreduce:
246      break;
247  
248    case 16:
249 -#line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
250 +#line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y"
251      {
252                           source.filename = (yyvsp[(1) - (3)].word);
253                           redir.filename = (yyvsp[(3) - (3)].word);
254 @@ -2244,7 +2244,7 @@ yyreduce:
255      break;
256  
257    case 17:
258 -#line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
259 +#line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y"
260      {
261                           source.dest = 1;
262                           redir.filename = (yyvsp[(2) - (2)].word);
263 @@ -2253,7 +2253,7 @@ yyreduce:
264      break;
265  
266    case 18:
267 -#line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
268 +#line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y"
269      {
270                           source.dest = (yyvsp[(1) - (3)].number);
271                           redir.filename = (yyvsp[(3) - (3)].word);
272 @@ -2262,7 +2262,7 @@ yyreduce:
273      break;
274  
275    case 19:
276 -#line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
277 +#line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y"
278      {
279                           source.filename = (yyvsp[(1) - (3)].word);
280                           redir.filename = (yyvsp[(3) - (3)].word);
281 @@ -2271,7 +2271,7 @@ yyreduce:
282      break;
283  
284    case 20:
285 -#line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
286 +#line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y"
287      {
288                           source.dest = 0;
289                           redir.filename = (yyvsp[(2) - (2)].word);
290 @@ -2280,7 +2280,7 @@ yyreduce:
291      break;
292  
293    case 21:
294 -#line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
295 +#line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y"
296      {
297                           source.dest = (yyvsp[(1) - (3)].number);
298                           redir.filename = (yyvsp[(3) - (3)].word);
299 @@ -2289,7 +2289,7 @@ yyreduce:
300      break;
301  
302    case 22:
303 -#line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
304 +#line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y"
305      {
306                           source.filename = (yyvsp[(1) - (3)].word);
307                           redir.filename = (yyvsp[(3) - (3)].word);
308 @@ -2298,7 +2298,7 @@ yyreduce:
309      break;
310  
311    case 23:
312 -#line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
313 +#line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y"
314      {
315                           source.dest = 0;
316                           redir.filename = (yyvsp[(2) - (2)].word);
317 @@ -2308,7 +2308,7 @@ yyreduce:
318      break;
319  
320    case 24:
321 -#line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
322 +#line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y"
323      {
324                           source.dest = (yyvsp[(1) - (3)].number);
325                           redir.filename = (yyvsp[(3) - (3)].word);
326 @@ -2318,7 +2318,7 @@ yyreduce:
327      break;
328  
329    case 25:
330 -#line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
331 +#line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y"
332      {
333                           source.filename = (yyvsp[(1) - (3)].word);
334                           redir.filename = (yyvsp[(3) - (3)].word);
335 @@ -2328,7 +2328,7 @@ yyreduce:
336      break;
337  
338    case 26:
339 -#line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
340 +#line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y"
341      {
342                           source.dest = 0;
343                           redir.filename = (yyvsp[(2) - (2)].word);
344 @@ -2338,7 +2338,7 @@ yyreduce:
345      break;
346  
347    case 27:
348 -#line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
349 +#line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y"
350      {
351                           source.dest = (yyvsp[(1) - (3)].number);
352                           redir.filename = (yyvsp[(3) - (3)].word);
353 @@ -2348,7 +2348,7 @@ yyreduce:
354      break;
355  
356    case 28:
357 -#line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
358 +#line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y"
359      {
360                           source.filename = (yyvsp[(1) - (3)].word);
361                           redir.filename = (yyvsp[(3) - (3)].word);
362 @@ -2358,7 +2358,7 @@ yyreduce:
363      break;
364  
365    case 29:
366 -#line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
367 +#line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y"
368      {
369                           source.dest = 0;
370                           redir.filename = (yyvsp[(2) - (2)].word);
371 @@ -2367,7 +2367,7 @@ yyreduce:
372      break;
373  
374    case 30:
375 -#line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
376 +#line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y"
377      {
378                           source.dest = (yyvsp[(1) - (3)].number);
379                           redir.filename = (yyvsp[(3) - (3)].word);
380 @@ -2376,7 +2376,7 @@ yyreduce:
381      break;
382  
383    case 31:
384 -#line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
385 +#line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y"
386      {
387                           source.filename = (yyvsp[(1) - (3)].word);
388                           redir.filename = (yyvsp[(3) - (3)].word);
389 @@ -2385,7 +2385,7 @@ yyreduce:
390      break;
391  
392    case 32:
393 -#line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
394 +#line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y"
395      {
396                           source.dest = 0;
397                           redir.dest = (yyvsp[(2) - (2)].number);
398 @@ -2394,7 +2394,7 @@ yyreduce:
399      break;
400  
401    case 33:
402 -#line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
403 +#line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y"
404      {
405                           source.dest = (yyvsp[(1) - (3)].number);
406                           redir.dest = (yyvsp[(3) - (3)].number);
407 @@ -2403,7 +2403,7 @@ yyreduce:
408      break;
409  
410    case 34:
411 -#line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
412 +#line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y"
413      {
414                           source.filename = (yyvsp[(1) - (3)].word);
415                           redir.dest = (yyvsp[(3) - (3)].number);
416 @@ -2412,7 +2412,7 @@ yyreduce:
417      break;
418  
419    case 35:
420 -#line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
421 +#line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y"
422      {
423                           source.dest = 1;
424                           redir.dest = (yyvsp[(2) - (2)].number);
425 @@ -2421,7 +2421,7 @@ yyreduce:
426      break;
427  
428    case 36:
429 -#line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
430 +#line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y"
431      {
432                           source.dest = (yyvsp[(1) - (3)].number);
433                           redir.dest = (yyvsp[(3) - (3)].number);
434 @@ -2430,7 +2430,7 @@ yyreduce:
435      break;
436  
437    case 37:
438 -#line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
439 +#line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y"
440      {
441                           source.filename = (yyvsp[(1) - (3)].word);
442                           redir.dest = (yyvsp[(3) - (3)].number);
443 @@ -2439,7 +2439,7 @@ yyreduce:
444      break;
445  
446    case 38:
447 -#line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
448 +#line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y"
449      {
450                           source.dest = 0;
451                           redir.filename = (yyvsp[(2) - (2)].word);
452 @@ -2448,7 +2448,7 @@ yyreduce:
453      break;
454  
455    case 39:
456 -#line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
457 +#line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y"
458      {
459                           source.dest = (yyvsp[(1) - (3)].number);
460                           redir.filename = (yyvsp[(3) - (3)].word);
461 @@ -2457,7 +2457,7 @@ yyreduce:
462      break;
463  
464    case 40:
465 -#line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
466 +#line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y"
467      {
468                           source.filename = (yyvsp[(1) - (3)].word);
469                           redir.filename = (yyvsp[(3) - (3)].word);
470 @@ -2466,7 +2466,7 @@ yyreduce:
471      break;
472  
473    case 41:
474 -#line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
475 +#line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y"
476      {
477                           source.dest = 1;
478                           redir.filename = (yyvsp[(2) - (2)].word);
479 @@ -2475,7 +2475,7 @@ yyreduce:
480      break;
481  
482    case 42:
483 -#line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
484 +#line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y"
485      {
486                           source.dest = (yyvsp[(1) - (3)].number);
487                           redir.filename = (yyvsp[(3) - (3)].word);
488 @@ -2484,7 +2484,7 @@ yyreduce:
489      break;
490  
491    case 43:
492 -#line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
493 +#line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y"
494      {
495                           source.filename = (yyvsp[(1) - (3)].word);
496                           redir.filename = (yyvsp[(3) - (3)].word);
497 @@ -2493,7 +2493,7 @@ yyreduce:
498      break;
499  
500    case 44:
501 -#line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
502 +#line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y"
503      {
504                           source.dest = 1;
505                           redir.dest = 0;
506 @@ -2502,7 +2502,7 @@ yyreduce:
507      break;
508  
509    case 45:
510 -#line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
511 +#line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y"
512      {
513                           source.dest = (yyvsp[(1) - (3)].number);
514                           redir.dest = 0;
515 @@ -2511,7 +2511,7 @@ yyreduce:
516      break;
517  
518    case 46:
519 -#line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
520 +#line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y"
521      {
522                           source.filename = (yyvsp[(1) - (3)].word);
523                           redir.dest = 0;
524 @@ -2520,7 +2520,7 @@ yyreduce:
525      break;
526  
527    case 47:
528 -#line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
529 +#line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y"
530      {
531                           source.dest = 0;
532                           redir.dest = 0;
533 @@ -2529,7 +2529,7 @@ yyreduce:
534      break;
535  
536    case 48:
537 -#line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
538 +#line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y"
539      {
540                           source.dest = (yyvsp[(1) - (3)].number);
541                           redir.dest = 0;
542 @@ -2538,7 +2538,7 @@ yyreduce:
543      break;
544  
545    case 49:
546 -#line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
547 +#line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y"
548      {
549                           source.filename = (yyvsp[(1) - (3)].word);
550                           redir.dest = 0;
551 @@ -2547,7 +2547,7 @@ yyreduce:
552      break;
553  
554    case 50:
555 -#line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
556 +#line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y"
557      {
558                           source.dest = 1;
559                           redir.filename = (yyvsp[(2) - (2)].word);
560 @@ -2556,7 +2556,7 @@ yyreduce:
561      break;
562  
563    case 51:
564 -#line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
565 +#line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y"
566      {
567                           source.dest = 1;
568                           redir.filename = (yyvsp[(2) - (2)].word);
569 @@ -2565,29 +2565,29 @@ yyreduce:
570      break;
571  
572    case 52:
573 -#line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
574 +#line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y"
575      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
576      break;
577  
578    case 53:
579 -#line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
580 +#line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y"
581      { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; }
582      break;
583  
584    case 54:
585 -#line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
586 +#line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y"
587      { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; }
588      break;
589  
590    case 55:
591 -#line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
592 +#line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y"
593      {
594                           (yyval.redirect) = (yyvsp[(1) - (1)].redirect);
595                         }
596      break;
597  
598    case 56:
599 -#line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
600 +#line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y"
601      {
602                           register REDIRECT *t;
603  
604 @@ -2599,27 +2599,27 @@ yyreduce:
605      break;
606  
607    case 57:
608 -#line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
609 +#line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y"
610      { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); }
611      break;
612  
613    case 58:
614 -#line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
615 +#line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y"
616      { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); }
617      break;
618  
619    case 59:
620 -#line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
621 +#line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y"
622      { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); }
623      break;
624  
625    case 60:
626 -#line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
627 +#line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y"
628      { (yyval.command) = (yyvsp[(1) - (1)].command); }
629      break;
630  
631    case 61:
632 -#line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
633 +#line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y"
634      {
635                           COMMAND *tc;
636  
637 @@ -2638,72 +2638,72 @@ yyreduce:
638      break;
639  
640    case 62:
641 -#line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
642 +#line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y"
643      { (yyval.command) = (yyvsp[(1) - (1)].command); }
644      break;
645  
646    case 63:
647 -#line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
648 +#line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y"
649      { (yyval.command) = (yyvsp[(1) - (1)].command); }
650      break;
651  
652    case 64:
653 -#line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
654 +#line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y"
655      { (yyval.command) = (yyvsp[(1) - (1)].command); }
656      break;
657  
658    case 65:
659 -#line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
660 +#line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y"
661      { (yyval.command) = (yyvsp[(1) - (1)].command); }
662      break;
663  
664    case 66:
665 -#line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
666 +#line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y"
667      { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
668      break;
669  
670    case 67:
671 -#line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
672 +#line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y"
673      { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); }
674      break;
675  
676    case 68:
677 -#line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
678 +#line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y"
679      { (yyval.command) = (yyvsp[(1) - (1)].command); }
680      break;
681  
682    case 69:
683 -#line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
684 +#line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y"
685      { (yyval.command) = (yyvsp[(1) - (1)].command); }
686      break;
687  
688    case 70:
689 -#line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
690 +#line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y"
691      { (yyval.command) = (yyvsp[(1) - (1)].command); }
692      break;
693  
694    case 71:
695 -#line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
696 +#line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y"
697      { (yyval.command) = (yyvsp[(1) - (1)].command); }
698      break;
699  
700    case 72:
701 -#line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
702 +#line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y"
703      { (yyval.command) = (yyvsp[(1) - (1)].command); }
704      break;
705  
706    case 73:
707 -#line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
708 +#line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y"
709      { (yyval.command) = (yyvsp[(1) - (1)].command); }
710      break;
711  
712    case 74:
713 -#line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
714 +#line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y"
715      { (yyval.command) = (yyvsp[(1) - (1)].command); }
716      break;
717  
718    case 75:
719 -#line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
720 +#line 785 "/usr/src/local/bash/bash-4.3-patched/parse.y"
721      {
722                           (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
723                           if (word_top > 0) word_top--;
724 @@ -2711,7 +2711,7 @@ yyreduce:
725      break;
726  
727    case 76:
728 -#line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
729 +#line 790 "/usr/src/local/bash/bash-4.3-patched/parse.y"
730      {
731                           (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
732                           if (word_top > 0) word_top--;
733 @@ -2719,7 +2719,7 @@ yyreduce:
734      break;
735  
736    case 77:
737 -#line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
738 +#line 795 "/usr/src/local/bash/bash-4.3-patched/parse.y"
739      {
740                           (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
741                           if (word_top > 0) word_top--;
742 @@ -2727,7 +2727,7 @@ yyreduce:
743      break;
744  
745    case 78:
746 -#line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
747 +#line 800 "/usr/src/local/bash/bash-4.3-patched/parse.y"
748      {
749                           (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
750                           if (word_top > 0) word_top--;
751 @@ -2735,7 +2735,7 @@ yyreduce:
752      break;
753  
754    case 79:
755 -#line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
756 +#line 805 "/usr/src/local/bash/bash-4.3-patched/parse.y"
757      {
758                           (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]);
759                           if (word_top > 0) word_top--;
760 @@ -2743,7 +2743,7 @@ yyreduce:
761      break;
762  
763    case 80:
764 -#line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
765 +#line 810 "/usr/src/local/bash/bash-4.3-patched/parse.y"
766      {
767                           (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]);
768                           if (word_top > 0) word_top--;
769 @@ -2751,7 +2751,7 @@ yyreduce:
770      break;
771  
772    case 81:
773 -#line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
774 +#line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y"
775      {
776                           (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
777                           if (word_top > 0) word_top--;
778 @@ -2759,7 +2759,7 @@ yyreduce:
779      break;
780  
781    case 82:
782 -#line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
783 +#line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y"
784      {
785                           (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]);
786                           if (word_top > 0) word_top--;
787 @@ -2767,7 +2767,7 @@ yyreduce:
788      break;
789  
790    case 83:
791 -#line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
792 +#line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y"
793      {
794                                   (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
795                                   if (word_top > 0) word_top--;
796 @@ -2775,7 +2775,7 @@ yyreduce:
797      break;
798  
799    case 84:
800 -#line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
801 +#line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y"
802      {
803                                   (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno);
804                                   if (word_top > 0) word_top--;
805 @@ -2783,7 +2783,7 @@ yyreduce:
806      break;
807  
808    case 85:
809 -#line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
810 +#line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y"
811      {
812                                   (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
813                                   if (word_top > 0) word_top--;
814 @@ -2791,7 +2791,7 @@ yyreduce:
815      break;
816  
817    case 86:
818 -#line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
819 +#line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y"
820      {
821                                   (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno);
822                                   if (word_top > 0) word_top--;
823 @@ -2799,7 +2799,7 @@ yyreduce:
824      break;
825  
826    case 87:
827 -#line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
828 +#line 849 "/usr/src/local/bash/bash-4.3-patched/parse.y"
829      {
830                           (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
831                           if (word_top > 0) word_top--;
832 @@ -2807,7 +2807,7 @@ yyreduce:
833      break;
834  
835    case 88:
836 -#line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
837 +#line 854 "/usr/src/local/bash/bash-4.3-patched/parse.y"
838      {
839                           (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]);
840                           if (word_top > 0) word_top--;
841 @@ -2815,7 +2815,7 @@ yyreduce:
842      break;
843  
844    case 89:
845 -#line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
846 +#line 859 "/usr/src/local/bash/bash-4.3-patched/parse.y"
847      {
848                           (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
849                           if (word_top > 0) word_top--;
850 @@ -2823,7 +2823,7 @@ yyreduce:
851      break;
852  
853    case 90:
854 -#line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
855 +#line 864 "/usr/src/local/bash/bash-4.3-patched/parse.y"
856      {
857                           (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]);
858                           if (word_top > 0) word_top--;
859 @@ -2831,7 +2831,7 @@ yyreduce:
860      break;
861  
862    case 91:
863 -#line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
864 +#line 869 "/usr/src/local/bash/bash-4.3-patched/parse.y"
865      {
866                           (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]);
867                           if (word_top > 0) word_top--;
868 @@ -2839,7 +2839,7 @@ yyreduce:
869      break;
870  
871    case 92:
872 -#line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
873 +#line 874 "/usr/src/local/bash/bash-4.3-patched/parse.y"
874      {
875                           (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]);
876                           if (word_top > 0) word_top--;
877 @@ -2847,7 +2847,7 @@ yyreduce:
878      break;
879  
880    case 93:
881 -#line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
882 +#line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y"
883      {
884                           (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
885                           if (word_top > 0) word_top--;
886 @@ -2855,7 +2855,7 @@ yyreduce:
887      break;
888  
889    case 94:
890 -#line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
891 +#line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y"
892      {
893                           (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]);
894                           if (word_top > 0) word_top--;
895 @@ -2863,7 +2863,7 @@ yyreduce:
896      break;
897  
898    case 95:
899 -#line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
900 +#line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y"
901      {
902                           (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]);
903                           if (word_top > 0) word_top--;
904 @@ -2871,27 +2871,27 @@ yyreduce:
905      break;
906  
907    case 96:
908 -#line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
909 +#line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y"
910      { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); }
911      break;
912  
913    case 97:
914 -#line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
915 +#line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y"
916      { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); }
917      break;
918  
919    case 98:
920 -#line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
921 +#line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y"
922      { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); }
923      break;
924  
925    case 99:
926 -#line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
927 +#line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y"
928      { (yyval.command) = (yyvsp[(1) - (1)].command); }
929      break;
930  
931    case 100:
932 -#line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
933 +#line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y"
934      {
935                           COMMAND *tc;
936  
937 @@ -2923,7 +2923,7 @@ yyreduce:
938      break;
939  
940    case 101:
941 -#line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
942 +#line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y"
943      {
944                           (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command));
945                           (yyval.command)->flags |= CMD_WANT_SUBSHELL;
946 @@ -2931,7 +2931,7 @@ yyreduce:
947      break;
948  
949    case 102:
950 -#line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
951 +#line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y"
952      {
953                           (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command));
954                           (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
955 @@ -2939,7 +2939,7 @@ yyreduce:
956      break;
957  
958    case 103:
959 -#line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
960 +#line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y"
961      {
962                           COMMAND *tc;
963  
964 @@ -2959,7 +2959,7 @@ yyreduce:
965      break;
966  
967    case 104:
968 -#line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
969 +#line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y"
970      {
971                           (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command));
972                           (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
973 @@ -2967,7 +2967,7 @@ yyreduce:
974      break;
975  
976    case 105:
977 -#line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
978 +#line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y"
979      {
980                           COMMAND *tc;
981  
982 @@ -2987,7 +2987,7 @@ yyreduce:
983      break;
984  
985    case 106:
986 -#line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
987 +#line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y"
988      {
989                           (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command)));
990                           (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
991 @@ -2995,117 +2995,117 @@ yyreduce:
992      break;
993  
994    case 107:
995 -#line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
996 +#line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y"
997      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); }
998      break;
999  
1000    case 108:
1001 -#line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1002 +#line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1003      { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); }
1004      break;
1005  
1006    case 109:
1007 -#line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1008 +#line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1009      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); }
1010      break;
1011  
1012    case 110:
1013 -#line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1014 +#line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1015      { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); }
1016      break;
1017  
1018    case 111:
1019 -#line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1020 +#line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1021      { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); }
1022      break;
1023  
1024    case 112:
1025 -#line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1026 +#line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1027      { (yyval.command) = (yyvsp[(2) - (3)].command); }
1028      break;
1029  
1030    case 113:
1031 -#line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1032 +#line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1033      { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); }
1034      break;
1035  
1036    case 114:
1037 -#line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1038 +#line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1039      { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); }
1040      break;
1041  
1042    case 115:
1043 -#line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1044 +#line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1045      { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); }
1046      break;
1047  
1048    case 117:
1049 -#line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1050 +#line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1051      { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); }
1052      break;
1053  
1054    case 118:
1055 -#line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1056 +#line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1057      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); }
1058      break;
1059  
1060    case 119:
1061 -#line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1062 +#line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1063      { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); }
1064      break;
1065  
1066    case 120:
1067 -#line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1068 +#line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1069      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); }
1070      break;
1071  
1072    case 121:
1073 -#line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1074 +#line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1075      { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); }
1076      break;
1077  
1078    case 122:
1079 -#line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1080 +#line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1081      { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1082      break;
1083  
1084    case 123:
1085 -#line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1086 +#line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1087      { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1088      break;
1089  
1090    case 124:
1091 -#line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1092 +#line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1093      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1094      break;
1095  
1096    case 125:
1097 -#line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1098 +#line 1049 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1099      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1100      break;
1101  
1102    case 126:
1103 -#line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1104 +#line 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1105      { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); }
1106      break;
1107  
1108    case 127:
1109 -#line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1110 +#line 1053 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1111      { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); }
1112      break;
1113  
1114    case 128:
1115 -#line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1116 +#line 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1117      { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); }
1118      break;
1119  
1120    case 129:
1121 -#line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1122 +#line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1123      { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); }
1124      break;
1125  
1126    case 130:
1127 -#line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1128 +#line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1129      {
1130                           (yyval.command) = (yyvsp[(2) - (2)].command);
1131                           if (need_here_doc)
1132 @@ -3114,14 +3114,14 @@ yyreduce:
1133      break;
1134  
1135    case 132:
1136 -#line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1137 +#line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1138      {
1139                           (yyval.command) = (yyvsp[(2) - (2)].command);
1140                         }
1141      break;
1142  
1143    case 134:
1144 -#line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1145 +#line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1146      {
1147                           if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1148                             (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&');
1149 @@ -3131,17 +3131,17 @@ yyreduce:
1150      break;
1151  
1152    case 136:
1153 -#line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1154 +#line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1155      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1156      break;
1157  
1158    case 137:
1159 -#line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1160 +#line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1161      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1162      break;
1163  
1164    case 138:
1165 -#line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1166 +#line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1167      {
1168                           if ((yyvsp[(1) - (4)].command)->type == cm_connection)
1169                             (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&');
1170 @@ -3151,37 +3151,37 @@ yyreduce:
1171      break;
1172  
1173    case 139:
1174 -#line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1175 +#line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1176      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1177      break;
1178  
1179    case 140:
1180 -#line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1181 +#line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1182      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); }
1183      break;
1184  
1185    case 141:
1186 -#line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1187 +#line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1188      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1189      break;
1190  
1191    case 144:
1192 -#line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1193 +#line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1194      { (yyval.number) = '\n'; }
1195      break;
1196  
1197    case 145:
1198 -#line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1199 +#line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1200      { (yyval.number) = ';'; }
1201      break;
1202  
1203    case 146:
1204 -#line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1205 +#line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1206      { (yyval.number) = yacc_EOF; }
1207      break;
1208  
1209    case 149:
1210 -#line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1211 +#line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1212      {
1213                           (yyval.command) = (yyvsp[(1) - (1)].command);
1214                           if (need_here_doc)
1215 @@ -3197,7 +3197,7 @@ yyreduce:
1216      break;
1217  
1218    case 150:
1219 -#line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1220 +#line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1221      {
1222                           if ((yyvsp[(1) - (2)].command)->type == cm_connection)
1223                             (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&');
1224 @@ -3216,7 +3216,7 @@ yyreduce:
1225      break;
1226  
1227    case 151:
1228 -#line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1229 +#line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1230      {
1231                           (yyval.command) = (yyvsp[(1) - (2)].command);
1232                           if (need_here_doc)
1233 @@ -3232,17 +3232,17 @@ yyreduce:
1234      break;
1235  
1236    case 152:
1237 -#line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1238 +#line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1239      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); }
1240      break;
1241  
1242    case 153:
1243 -#line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1244 +#line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1245      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); }
1246      break;
1247  
1248    case 154:
1249 -#line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1250 +#line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1251      {
1252                           if ((yyvsp[(1) - (3)].command)->type == cm_connection)
1253                             (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&');
1254 @@ -3252,22 +3252,22 @@ yyreduce:
1255      break;
1256  
1257    case 155:
1258 -#line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1259 +#line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1260      { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); }
1261      break;
1262  
1263    case 156:
1264 -#line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1265 +#line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1266      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1267      break;
1268  
1269    case 157:
1270 -#line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1271 +#line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1272      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1273      break;
1274  
1275    case 158:
1276 -#line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1277 +#line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1278      {
1279                           if ((yyvsp[(2) - (2)].command))
1280                             (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN;     /* toggle */
1281 @@ -3276,7 +3276,7 @@ yyreduce:
1282      break;
1283  
1284    case 159:
1285 -#line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1286 +#line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1287      {
1288                           if ((yyvsp[(2) - (2)].command))
1289                             (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number);
1290 @@ -3285,7 +3285,7 @@ yyreduce:
1291      break;
1292  
1293    case 160:
1294 -#line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1295 +#line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1296      {
1297                           ELEMENT x;
1298  
1299 @@ -3305,7 +3305,7 @@ yyreduce:
1300      break;
1301  
1302    case 161:
1303 -#line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1304 +#line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1305      {
1306                           ELEMENT x;
1307  
1308 @@ -3326,12 +3326,12 @@ yyreduce:
1309      break;
1310  
1311    case 162:
1312 -#line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1313 +#line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1314      { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); }
1315      break;
1316  
1317    case 163:
1318 -#line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1319 +#line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1320      {
1321                           /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
1322                           COMMAND *tc;
1323 @@ -3357,22 +3357,22 @@ yyreduce:
1324      break;
1325  
1326    case 164:
1327 -#line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1328 +#line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1329      { (yyval.command) = (yyvsp[(1) - (1)].command); }
1330      break;
1331  
1332    case 165:
1333 -#line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1334 +#line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1335      { (yyval.number) = CMD_TIME_PIPELINE; }
1336      break;
1337  
1338    case 166:
1339 -#line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1340 +#line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1341      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
1342      break;
1343  
1344    case 167:
1345 -#line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1346 +#line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1347      { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
1348      break;
1349  
1350 @@ -3592,7 +3592,7 @@ yyreturn:
1351  }
1352  
1353  
1354 -#line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y"
1355 +#line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y"
1356  
1357  
1358  /* Initial size to allocate for tokens, and the
1359 @@ -4850,6 +4850,16 @@ shell_ungetc (c)
1360      eol_ungetc_lookahead = c;
1361  }
1362  
1363 +char *
1364 +parser_remaining_input ()
1365 +{
1366 +  if (shell_input_line == 0)
1367 +    return 0;
1368 +  if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len)
1369 +    return '\0';       /* XXX */
1370 +  return (shell_input_line + shell_input_line_index);
1371 +}
1372 +
1373  #ifdef INCLUDE_UNUSED
1374  /* Back the input pointer up by one, effectively `ungetting' a character. */
1375  static void
1376 @@ -6339,8 +6349,8 @@ xparse_dolparen (base, string, indp, fla
1377    reset_parser ();
1378    /* reset_parser clears shell_input_line and associated variables */
1379    restore_input_line_state (&ls);
1380 -  if (interactive)
1381 -    token_to_read = 0;
1382 +
1383 +  token_to_read = 0;
1384  
1385    /* Need to find how many characters parse_and_execute consumed, update
1386       *indp, if flags != 0, copy the portion of the string parsed into RET
1387 --- a/patchlevel.h
1388 +++ b/patchlevel.h
1389 @@ -25,6 +25,6 @@
1390     regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
1391     looks for to find the patch level (for the sccs version string). */
1392  
1393 -#define PATCHLEVEL 29
1394 +#define PATCHLEVEL 30
1395  
1396  #endif /* _PATCHLEVEL_H_ */