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