From 885ddf9b6823a8c003b2c0161c70956174942e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Atienza?= Date: Fri, 18 Aug 2017 02:17:15 +0200 Subject: [PATCH] bash: version bump to 4.4.12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Iván Atienza --- utils/bash/Makefile | 6 +- utils/bash/patches/001-compile-fix.patch | 8 +- .../patches/002-force-internal-readline.patch | 16 +- .../patches/101-upstream-bash43-001.patch | 49 - .../patches/101-upstream-bash44-001.patch | 36 + .../patches/102-upstream-bash43-002.patch | 49 - .../patches/102-upstream-bash44-002.patch | 46 + .../patches/103-upstream-bash43-003.patch | 39 - .../patches/103-upstream-bash44-003.patch | 39 + .../patches/104-upstream-bash43-004.patch | 38 - .../patches/104-upstream-bash44-004.patch | 66 + .../patches/105-upstream-bash43-005.patch | 50 - .../patches/105-upstream-bash44-005.patch | 29 + .../patches/106-upstream-bash43-006.patch | 39 - .../patches/106-upstream-bash44-006.patch | 37 + .../patches/107-upstream-bash43-007.patch | 45 - .../patches/107-upstream-bash44-007.patch | 100 ++ .../patches/108-upstream-bash43-008.patch | 148 -- .../patches/108-upstream-bash44-008.patch | 58 + .../patches/109-upstream-bash43-009.patch | 51 - .../patches/109-upstream-bash44-009.patch | 67 + .../patches/110-upstream-bash43-010.patch | 145 -- .../patches/110-upstream-bash44-010.patch | 26 + .../patches/111-upstream-bash43-011.patch | 40 - .../patches/111-upstream-bash44-011.patch | 26 + .../patches/112-upstream-bash43-012.patch | 38 - .../patches/112-upstream-bash44-012.patch | 106 ++ .../patches/113-upstream-bash43-013.patch | 52 - .../patches/114-upstream-bash43-014.patch | 95 - .../patches/115-upstream-bash43-015.patch | 48 - .../patches/116-upstream-bash43-016.patch | 121 -- .../patches/117-upstream-bash43-017.patch | 41 - .../patches/118-upstream-bash43-018.patch | 38 - .../patches/119-upstream-bash43-019.patch | 75 - .../patches/120-upstream-bash43-020.patch | 93 - .../patches/121-upstream-bash43-021.patch | 46 - .../patches/122-upstream-bash43-022.patch | 47 - .../patches/123-upstream-bash43-023.patch | 78 - .../patches/124-upstream-bash43-024.patch | 45 - .../patches/125-upstream-bash43-025.patch | 110 -- .../patches/126-upstream-bash43-026.patch | 54 - .../patches/127-upstream-bash43-027.patch | 176 -- .../patches/128-upstream-bash43-028.patch | 1526 ----------------- .../patches/129-upstream-bash43-029.patch | 50 - .../patches/130-upstream-bash43-030.patch | 1396 --------------- .../patches/131-upstream-bash43-031.patch | 96 -- .../patches/132-upstream-bash43-032.patch | 42 - .../patches/133-upstream-bash43-033.patch | 201 --- .../patches/134-upstream-bash43-034.patch | 74 - .../patches/135-upstream-bash43-035.patch | 48 - .../patches/136-upstream-bash43-036.patch | 48 - .../patches/137-upstream-bash43-037.patch | 38 - .../patches/138-upstream-bash43-038.patch | 67 - .../patches/139-upstream-bash43-039.patch | 52 - .../patches/140-upstream-bash43-040.patch | 38 - .../patches/141-upstream-bash43-041.patch | 67 - .../patches/142-upstream-bash43-042.patch | 50 - 57 files changed, 654 insertions(+), 5655 deletions(-) delete mode 100644 utils/bash/patches/101-upstream-bash43-001.patch create mode 100644 utils/bash/patches/101-upstream-bash44-001.patch delete mode 100644 utils/bash/patches/102-upstream-bash43-002.patch create mode 100644 utils/bash/patches/102-upstream-bash44-002.patch delete mode 100644 utils/bash/patches/103-upstream-bash43-003.patch create mode 100644 utils/bash/patches/103-upstream-bash44-003.patch delete mode 100644 utils/bash/patches/104-upstream-bash43-004.patch create mode 100644 utils/bash/patches/104-upstream-bash44-004.patch delete mode 100644 utils/bash/patches/105-upstream-bash43-005.patch create mode 100644 utils/bash/patches/105-upstream-bash44-005.patch delete mode 100644 utils/bash/patches/106-upstream-bash43-006.patch create mode 100644 utils/bash/patches/106-upstream-bash44-006.patch delete mode 100644 utils/bash/patches/107-upstream-bash43-007.patch create mode 100644 utils/bash/patches/107-upstream-bash44-007.patch delete mode 100644 utils/bash/patches/108-upstream-bash43-008.patch create mode 100644 utils/bash/patches/108-upstream-bash44-008.patch delete mode 100644 utils/bash/patches/109-upstream-bash43-009.patch create mode 100644 utils/bash/patches/109-upstream-bash44-009.patch delete mode 100644 utils/bash/patches/110-upstream-bash43-010.patch create mode 100644 utils/bash/patches/110-upstream-bash44-010.patch delete mode 100644 utils/bash/patches/111-upstream-bash43-011.patch create mode 100644 utils/bash/patches/111-upstream-bash44-011.patch delete mode 100644 utils/bash/patches/112-upstream-bash43-012.patch create mode 100644 utils/bash/patches/112-upstream-bash44-012.patch delete mode 100644 utils/bash/patches/113-upstream-bash43-013.patch delete mode 100644 utils/bash/patches/114-upstream-bash43-014.patch delete mode 100644 utils/bash/patches/115-upstream-bash43-015.patch delete mode 100644 utils/bash/patches/116-upstream-bash43-016.patch delete mode 100644 utils/bash/patches/117-upstream-bash43-017.patch delete mode 100644 utils/bash/patches/118-upstream-bash43-018.patch delete mode 100644 utils/bash/patches/119-upstream-bash43-019.patch delete mode 100644 utils/bash/patches/120-upstream-bash43-020.patch delete mode 100644 utils/bash/patches/121-upstream-bash43-021.patch delete mode 100644 utils/bash/patches/122-upstream-bash43-022.patch delete mode 100644 utils/bash/patches/123-upstream-bash43-023.patch delete mode 100644 utils/bash/patches/124-upstream-bash43-024.patch delete mode 100644 utils/bash/patches/125-upstream-bash43-025.patch delete mode 100644 utils/bash/patches/126-upstream-bash43-026.patch delete mode 100644 utils/bash/patches/127-upstream-bash43-027.patch delete mode 100644 utils/bash/patches/128-upstream-bash43-028.patch delete mode 100644 utils/bash/patches/129-upstream-bash43-029.patch delete mode 100644 utils/bash/patches/130-upstream-bash43-030.patch delete mode 100644 utils/bash/patches/131-upstream-bash43-031.patch delete mode 100644 utils/bash/patches/132-upstream-bash43-032.patch delete mode 100644 utils/bash/patches/133-upstream-bash43-033.patch delete mode 100644 utils/bash/patches/134-upstream-bash43-034.patch delete mode 100644 utils/bash/patches/135-upstream-bash43-035.patch delete mode 100644 utils/bash/patches/136-upstream-bash43-036.patch delete mode 100644 utils/bash/patches/137-upstream-bash43-037.patch delete mode 100644 utils/bash/patches/138-upstream-bash43-038.patch delete mode 100644 utils/bash/patches/139-upstream-bash43-039.patch delete mode 100644 utils/bash/patches/140-upstream-bash43-040.patch delete mode 100644 utils/bash/patches/141-upstream-bash43-041.patch delete mode 100644 utils/bash/patches/142-upstream-bash43-042.patch diff --git a/utils/bash/Makefile b/utils/bash/Makefile index 88b413afb3..9978d4925e 100644 --- a/utils/bash/Makefile +++ b/utils/bash/Makefile @@ -7,15 +7,15 @@ include $(TOPDIR)/rules.mk -BASE_VERSION:=4.3 +BASE_VERSION:=4.4 PKG_NAME:=bash -PKG_VERSION:=$(BASE_VERSION).42 +PKG_VERSION:=$(BASE_VERSION).12 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(BASE_VERSION).tar.gz PKG_SOURCE_URL:=@GNU/bash -PKG_HASH:=afc687a28e0e24dc21b988fa159ff9dbcf6b7caa92ade8645cc6d5605cd024d4 +PKG_HASH:=d86b3392c1202e8ff5a423b302e6284db7f8f435ea9f39b5b1b20fd3ac36dfcb PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BASE_VERSION) PKG_LICENSE:=GPL-3.0+ diff --git a/utils/bash/patches/001-compile-fix.patch b/utils/bash/patches/001-compile-fix.patch index 7efa97b363..c3ab62364c 100644 --- a/utils/bash/patches/001-compile-fix.patch +++ b/utils/bash/patches/001-compile-fix.patch @@ -1,6 +1,8 @@ ---- a/execute_cmd.c -+++ b/execute_cmd.c -@@ -2369,7 +2369,11 @@ execute_pipeline (command, asynchronous, +Index: bash-4.4/execute_cmd.c +=================================================================== +--- bash-4.4.orig/execute_cmd.c ++++ bash-4.4/execute_cmd.c +@@ -2459,7 +2459,11 @@ execute_pipeline (command, asynchronous, /* If the `lastpipe' option is set with shopt, and job control is not enabled, execute the last element of non-async pipelines in the current shell environment. */ diff --git a/utils/bash/patches/002-force-internal-readline.patch b/utils/bash/patches/002-force-internal-readline.patch index 050e4763e1..fd0b6958f8 100644 --- a/utils/bash/patches/002-force-internal-readline.patch +++ b/utils/bash/patches/002-force-internal-readline.patch @@ -1,6 +1,8 @@ ---- a/configure -+++ b/configure -@@ -5430,8 +5430,7 @@ if test $opt_readline = yes; then +Index: bash-4.4/configure +=================================================================== +--- bash-4.4.orig/configure ++++ bash-4.4/configure +@@ -5420,8 +5420,7 @@ if test $opt_readline = yes; then # static version specified as -llibname to override the # dynamic version case "${host_os}" in @@ -10,9 +12,11 @@ esac fi else ---- a/configure.ac -+++ b/configure.ac -@@ -578,8 +578,7 @@ if test $opt_readline = yes; then +Index: bash-4.4/configure.ac +=================================================================== +--- bash-4.4.orig/configure.ac ++++ bash-4.4/configure.ac +@@ -573,8 +573,7 @@ if test $opt_readline = yes; then # static version specified as -llibname to override the # dynamic version case "${host_os}" in diff --git a/utils/bash/patches/101-upstream-bash43-001.patch b/utils/bash/patches/101-upstream-bash43-001.patch deleted file mode 100644 index 3231273af3..0000000000 --- a/utils/bash/patches/101-upstream-bash43-001.patch +++ /dev/null @@ -1,49 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-001 - -Bug-Reported-by: NBaH -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html - -Bug-Description: - -A missing check for a valid option prevented `test -R' from working. There -is another problem that causes bash to look up the wrong variable name when -processing the argument to `test -R'. - -Patch (apply with `patch -p0'): - ---- a/test.c -+++ b/test.c -@@ -646,8 +646,8 @@ unary_test (op, arg) - return (v && invisible_p (v) == 0 && var_isset (v) ? TRUE : FALSE); - - case 'R': -- v = find_variable (arg); -- return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE); -+ v = find_variable_noref (arg); -+ return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE); - } - - /* We can't actually get here, but this shuts up gcc. */ -@@ -723,6 +723,7 @@ test_unop (op) - case 'o': case 'p': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': case 'z': - case 'G': case 'L': case 'O': case 'S': case 'N': -+ case 'R': - return (1); - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 0 -+#define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/101-upstream-bash44-001.patch b/utils/bash/patches/101-upstream-bash44-001.patch new file mode 100644 index 0000000000..8481ed2a79 --- /dev/null +++ b/utils/bash/patches/101-upstream-bash44-001.patch @@ -0,0 +1,36 @@ +Index: bash-4.4/lib/readline/history.c +=================================================================== +--- bash-4.4.orig/lib/readline/history.c ++++ bash-4.4/lib/readline/history.c +@@ -57,6 +57,8 @@ extern int errno; + /* How big to make the_history when we first allocate it. */ + #define DEFAULT_HISTORY_INITIAL_SIZE 502 + ++#define MAX_HISTORY_INITIAL_SIZE 8192 ++ + /* The number of slots to increase the_history by. */ + #define DEFAULT_HISTORY_GROW_SIZE 50 + +@@ -307,7 +309,9 @@ add_history (string) + if (history_size == 0) + { + if (history_stifled && history_max_entries > 0) +- history_size = history_max_entries + 2; ++ history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE) ++ ? MAX_HISTORY_INITIAL_SIZE ++ : history_max_entries + 2; + else + history_size = DEFAULT_HISTORY_INITIAL_SIZE; + the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 0 ++#define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/102-upstream-bash43-002.patch b/utils/bash/patches/102-upstream-bash43-002.patch deleted file mode 100644 index 35421e8687..0000000000 --- a/utils/bash/patches/102-upstream-bash43-002.patch +++ /dev/null @@ -1,49 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-002 - -Bug-Reported-by: Moe Tunes -Bug-Reference-ID: <53103F49.3070100@gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html - -Bug-Description: - -A change to save state while running the DEBUG trap caused pipelines to hang -on systems which need process group synchronization while building pipelines. - -Patch (apply with `patch -p0'): - ---- a/trap.c -+++ b/trap.c -@@ -920,7 +920,8 @@ _run_trap_internal (sig, tag) - subst_assign_varlist = 0; - - #if defined (JOB_CONTROL) -- save_pipeline (1); /* XXX only provides one save level */ -+ if (sig != DEBUG_TRAP) /* run_debug_trap does this */ -+ save_pipeline (1); /* XXX only provides one save level */ - #endif - - /* If we're in a function, make sure return longjmps come here, too. */ -@@ -940,7 +941,8 @@ _run_trap_internal (sig, tag) - trap_exit_value = last_command_exit_value; - - #if defined (JOB_CONTROL) -- restore_pipeline (1); -+ if (sig != DEBUG_TRAP) /* run_debug_trap does this */ -+ restore_pipeline (1); - #endif - - subst_assign_varlist = save_subst_varlist; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 1 -+#define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/102-upstream-bash44-002.patch b/utils/bash/patches/102-upstream-bash44-002.patch new file mode 100644 index 0000000000..c3da17a350 --- /dev/null +++ b/utils/bash/patches/102-upstream-bash44-002.patch @@ -0,0 +1,46 @@ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 1 ++#define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -5931,6 +5931,7 @@ read_comsub (fd, quoted, rflag) + char *istring, buf[128], *bufp, *s; + int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul; + ssize_t bufn; ++ int nullbyte; + + istring = (char *)NULL; + istring_index = istring_size = bufn = tflag = 0; +@@ -5938,6 +5939,8 @@ read_comsub (fd, quoted, rflag) + for (skip_ctlesc = skip_ctlnul = 0, s = ifs_value; s && *s; s++) + skip_ctlesc |= *s == CTLESC, skip_ctlnul |= *s == CTLNUL; + ++ nullbyte = 0; ++ + /* Read the output of the command through the pipe. This may need to be + changed to understand multibyte characters in the future. */ + while (1) +@@ -5956,7 +5959,11 @@ read_comsub (fd, quoted, rflag) + if (c == 0) + { + #if 1 +- internal_warning ("%s", _("command substitution: ignored null byte in input")); ++ if (nullbyte == 0) ++ { ++ internal_warning ("%s", _("command substitution: ignored null byte in input")); ++ nullbyte = 1; ++ } + #endif + continue; + } diff --git a/utils/bash/patches/103-upstream-bash43-003.patch b/utils/bash/patches/103-upstream-bash43-003.patch deleted file mode 100644 index 7c9e56bc2a..0000000000 --- a/utils/bash/patches/103-upstream-bash43-003.patch +++ /dev/null @@ -1,39 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-003 - -Bug-Reported-by: Anatol Pomozov -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html - -Bug-Description: - -When in callback mode, some readline commands can cause readline to seg -fault by passing invalid contexts to callback functions. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/readline.c -+++ b/lib/readline/readline.c -@@ -744,7 +744,8 @@ _rl_dispatch_callback (cxt) - r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ)); - - RL_CHECK_SIGNALS (); -- if (r == 0) /* success! */ -+ /* We only treat values < 0 specially to simulate recursion. */ -+ if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ - { - _rl_keyseq_chain_dispose (); - RL_UNSETSTATE (RL_STATE_MULTIKEY); ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 2 -+#define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/103-upstream-bash44-003.patch b/utils/bash/patches/103-upstream-bash44-003.patch new file mode 100644 index 0000000000..6d4dea3bc8 --- /dev/null +++ b/utils/bash/patches/103-upstream-bash44-003.patch @@ -0,0 +1,39 @@ +Index: bash-4.4/lib/glob/sm_loop.c +=================================================================== +--- bash-4.4.orig/lib/glob/sm_loop.c ++++ bash-4.4/lib/glob/sm_loop.c +@@ -330,6 +330,12 @@ PARSE_COLLSYM (p, vp) + for (pc = 0; p[pc]; pc++) + if (p[pc] == L('.') && p[pc+1] == L(']')) + break; ++ if (p[pc] == 0) ++ { ++ if (vp) ++ *vp = INVALID; ++ return (p + pc); ++ } + val = COLLSYM (p, pc); + if (vp) + *vp = val; +@@ -483,6 +489,9 @@ BRACKMATCH (p, test, flags) + c = *p++; + c = FOLD (c); + ++ if (c == L('\0')) ++ return ((test == L('[')) ? savep : (CHAR *)0); ++ + if ((flags & FNM_PATHNAME) && c == L('/')) + /* [/] can never match when matching a pathname. */ + return (CHAR *)0; +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 2 ++#define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/104-upstream-bash43-004.patch b/utils/bash/patches/104-upstream-bash43-004.patch deleted file mode 100644 index 40ac35fd5f..0000000000 --- a/utils/bash/patches/104-upstream-bash43-004.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-004 - -Bug-Reported-by: Daan van Rossum -Bug-Reference-ID: <20140307072523.GA14250@flash.uchicago.edu> -Bug-Reference-URL: - -Bug-Description: - -The `.' command in vi mode cannot undo multi-key commands beginning with -`c', `d', and `y' (command plus motion specifier). - -Patch (apply with `patch -p0'): - ---- a/lib/readline/readline.c -+++ b/lib/readline/readline.c -@@ -965,7 +965,7 @@ _rl_dispatch_subseq (key, map, got_subse - #if defined (VI_MODE) - if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && - key != ANYOTHERKEY && -- rl_key_sequence_length == 1 && /* XXX */ -+ _rl_dispatching_keymap == vi_movement_keymap && - _rl_vi_textmod_command (key)) - _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); - #endif ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 3 -+#define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/104-upstream-bash44-004.patch b/utils/bash/patches/104-upstream-bash44-004.patch new file mode 100644 index 0000000000..f1ebff6af7 --- /dev/null +++ b/utils/bash/patches/104-upstream-bash44-004.patch @@ -0,0 +1,66 @@ +Index: bash-4.4/jobs.c +=================================================================== +--- bash-4.4.orig/jobs.c ++++ bash-4.4/jobs.c +@@ -453,6 +453,21 @@ cleanup_the_pipeline () + discard_pipeline (disposer); + } + ++void ++discard_last_procsub_child () ++{ ++ PROCESS *disposer; ++ sigset_t set, oset; ++ ++ BLOCK_CHILD (set, oset); ++ disposer = last_procsub_child; ++ last_procsub_child = (PROCESS *)NULL; ++ UNBLOCK_CHILD (oset); ++ ++ if (disposer) ++ discard_pipeline (disposer); ++} ++ + struct pipeline_saver * + alloc_pipeline_saver () + { +Index: bash-4.4/jobs.h +=================================================================== +--- bash-4.4.orig/jobs.h ++++ bash-4.4/jobs.h +@@ -190,6 +190,7 @@ extern JOB **jobs; + extern void making_children __P((void)); + extern void stop_making_children __P((void)); + extern void cleanup_the_pipeline __P((void)); ++extern void discard_last_procsub_child __P((void)); + extern void save_pipeline __P((int)); + extern PROCESS *restore_pipeline __P((int)); + extern void start_pipeline __P((void)); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 3 ++#define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -5808,10 +5808,7 @@ process_substitute (string, open_for_rea + { + #if defined (JOB_CONTROL) + if (last_procsub_child) +- { +- discard_pipeline (last_procsub_child); +- last_procsub_child = (PROCESS *)NULL; +- } ++ discard_last_procsub_child (); + last_procsub_child = restore_pipeline (0); + #endif + diff --git a/utils/bash/patches/105-upstream-bash43-005.patch b/utils/bash/patches/105-upstream-bash43-005.patch deleted file mode 100644 index 1cc5473841..0000000000 --- a/utils/bash/patches/105-upstream-bash43-005.patch +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-005 - -Bug-Reported-by: David Sines -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html - -Bug-Description: - -When in Posix mode, bash did not correctly interpret the ANSI-C-style -$'...' quoting mechanism when performing pattern substitution word -expansions within double quotes. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -3398,7 +3398,7 @@ parse_matched_pair (qc, open, close, len - within a double-quoted ${...} construct "an even number of - unescaped double-quotes or single-quotes, if any, shall occur." */ - /* This was changed in Austin Group Interp 221 */ -- if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') -+ if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') - continue; - - /* Could also check open == '`' if we want to parse grouping constructs ---- a/y.tab.c -+++ b/y.tab.c -@@ -5710,7 +5710,7 @@ parse_matched_pair (qc, open, close, len - within a double-quoted ${...} construct "an even number of - unescaped double-quotes or single-quotes, if any, shall occur." */ - /* This was changed in Austin Group Interp 221 */ -- if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') -+ if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') - continue; - - /* Could also check open == '`' if we want to parse grouping constructs ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 4 -+#define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/105-upstream-bash44-005.patch b/utils/bash/patches/105-upstream-bash44-005.patch new file mode 100644 index 0000000000..f9fb0182d9 --- /dev/null +++ b/utils/bash/patches/105-upstream-bash44-005.patch @@ -0,0 +1,29 @@ +Index: bash-4.4/builtins/evalstring.c +=================================================================== +--- bash-4.4.orig/builtins/evalstring.c ++++ bash-4.4/builtins/evalstring.c +@@ -104,12 +104,9 @@ should_suppress_fork (command) + running_trap == 0 && + *bash_input.location.string == '\0' && + command->type == cm_simple && +-#if 0 + signal_is_trapped (EXIT_TRAP) == 0 && + signal_is_trapped (ERROR_TRAP) == 0 && +-#else + any_signals_trapped () < 0 && +-#endif + command->redirects == 0 && command->value.Simple->redirects == 0 && + ((command->flags & CMD_TIME_PIPELINE) == 0) && + ((command->flags & CMD_INVERT_RETURN) == 0)); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 4 ++#define PATCHLEVEL 5 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/106-upstream-bash43-006.patch b/utils/bash/patches/106-upstream-bash43-006.patch deleted file mode 100644 index c5f52b1d81..0000000000 --- a/utils/bash/patches/106-upstream-bash43-006.patch +++ /dev/null @@ -1,39 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-006 - -Bug-Reported-by: Eduardo A . Bustamante Lopez -Bug-Reference-ID: <20140228170013.GA16015@dualbus.me> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html - -Bug-Description: - -A shell that started with job control active but was not interactive left -the terminal in the wrong process group when exiting, causing its parent -shell to get a stop signal when it attempted to read from the terminal. - -Patch (apply with `patch -p0'): - ---- a/jobs.c -+++ b/jobs.c -@@ -4374,7 +4374,7 @@ without_job_control () - void - end_job_control () - { -- if (interactive_shell) /* XXX - should it be interactive? */ -+ if (interactive_shell || job_control) /* XXX - should it be just job_control? */ - { - terminate_stopped_jobs (); - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 5 -+#define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/106-upstream-bash44-006.patch b/utils/bash/patches/106-upstream-bash44-006.patch new file mode 100644 index 0000000000..a232bff9fe --- /dev/null +++ b/utils/bash/patches/106-upstream-bash44-006.patch @@ -0,0 +1,37 @@ +Index: bash-4.4/builtins/pushd.def +=================================================================== +--- bash-4.4.orig/builtins/pushd.def ++++ bash-4.4/builtins/pushd.def +@@ -365,7 +365,7 @@ popd_builtin (list) + break; + } + +- if (which > directory_list_offset || (directory_list_offset == 0 && which == 0)) ++ if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0)) + { + pushd_error (directory_list_offset, which_word ? which_word : ""); + return (EXECUTION_FAILURE); +@@ -387,6 +387,11 @@ popd_builtin (list) + remove that directory from the list and shift the remainder + of the list into place. */ + i = (direction == '+') ? directory_list_offset - which : which; ++ if (i < 0 || i > directory_list_offset) ++ { ++ pushd_error (directory_list_offset, which_word ? which_word : ""); ++ return (EXECUTION_FAILURE); ++ } + free (pushd_directory_list[i]); + directory_list_offset--; + +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 5 ++#define PATCHLEVEL 6 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/107-upstream-bash43-007.patch b/utils/bash/patches/107-upstream-bash43-007.patch deleted file mode 100644 index 8578bd458d..0000000000 --- a/utils/bash/patches/107-upstream-bash43-007.patch +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-007 - -Bug-Reported-by: geir.hauge@gmail.com -Bug-Reference-ID: <20140318093650.B181C1C5B0B@gina.itea.ntnu.no> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html - -Bug-Description: - -Using compound assignments for associative arrays like - -assoc=( [x]= [y]=bar ) - -left the value corresponding to the key `x' NULL. This caused subsequent -lookups to interpret it as unset. - -Patch (apply with `patch -p0'): - ---- a/arrayfunc.c -+++ b/arrayfunc.c -@@ -597,6 +597,11 @@ assign_compound_array_list (var, nlist, - if (assoc_p (var)) - { - val = expand_assignment_string_to_string (val, 0); -+ if (val == 0) -+ { -+ val = (char *)xmalloc (1); -+ val[0] = '\0'; /* like do_assignment_internal */ -+ } - free_val = 1; - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 6 -+#define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/107-upstream-bash44-007.patch b/utils/bash/patches/107-upstream-bash44-007.patch new file mode 100644 index 0000000000..3e2973d771 --- /dev/null +++ b/utils/bash/patches/107-upstream-bash44-007.patch @@ -0,0 +1,100 @@ +Index: bash-4.4/bashline.c +=================================================================== +--- bash-4.4.orig/bashline.c ++++ bash-4.4/bashline.c +@@ -142,7 +142,7 @@ static int executable_completion __P((co + static rl_icppfunc_t *save_directory_hook __P((void)); + static void restore_directory_hook __P((rl_icppfunc_t)); + +-static int directory_exists __P((const char *)); ++static int directory_exists __P((const char *, int)); + + static void cleanup_expansion_error __P((void)); + static void maybe_make_readline_line __P((char *)); +@@ -3102,18 +3102,20 @@ restore_directory_hook (hookf) + rl_directory_rewrite_hook = hookf; + } + +-/* Check whether not the (dequoted) version of DIRNAME, with any trailing slash +- removed, exists. */ ++/* Check whether not DIRNAME, with any trailing slash removed, exists. If ++ SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */ + static int +-directory_exists (dirname) ++directory_exists (dirname, should_dequote) + const char *dirname; ++ int should_dequote; + { + char *new_dirname; + int dirlen, r; + struct stat sb; + +- /* First, dequote the directory name */ +- new_dirname = bash_dequote_filename ((char *)dirname, rl_completion_quote_character); ++ /* We save the string and chop the trailing slash because stat/lstat behave ++ inconsistently if one is present. */ ++ new_dirname = should_dequote ? bash_dequote_filename ((char *)dirname, rl_completion_quote_character) : savestring (dirname); + dirlen = STRLEN (new_dirname); + if (new_dirname[dirlen - 1] == '/') + new_dirname[dirlen - 1] = '\0'; +@@ -3145,7 +3147,7 @@ bash_filename_stat_hook (dirname) + else if (t = mbschr (local_dirname, '`')) /* XXX */ + should_expand_dirname = '`'; + +- if (should_expand_dirname && directory_exists (local_dirname)) ++ if (should_expand_dirname && directory_exists (local_dirname, 0)) + should_expand_dirname = 0; + + if (should_expand_dirname) +@@ -3155,7 +3157,7 @@ bash_filename_stat_hook (dirname) + have to worry about restoring this setting. */ + global_nounset = unbound_vars_is_error; + unbound_vars_is_error = 0; +- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ ++ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */ + unbound_vars_is_error = global_nounset; + if (wl) + { +@@ -3244,13 +3246,13 @@ bash_directory_completion_hook (dirname) + should_expand_dirname = '`'; + } + +- if (should_expand_dirname && directory_exists (local_dirname)) ++ if (should_expand_dirname && directory_exists (local_dirname, 1)) + should_expand_dirname = 0; + + if (should_expand_dirname) + { + new_dirname = savestring (local_dirname); +- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ ++ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */ + if (wl) + { + *dirname = string_list (wl); +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 6 ++#define PATCHLEVEL 7 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -9458,6 +9458,10 @@ add_twochars: + tword->flags |= word->flags & (W_ASSIGNARG|W_ASSIGNRHS); /* affects $@ */ + if (word->flags & W_COMPLETE) + tword->flags |= W_COMPLETE; /* for command substitutions */ ++ if (word->flags & W_NOCOMSUB) ++ tword->flags |= W_NOCOMSUB; ++ if (word->flags & W_NOPROCSUB) ++ tword->flags |= W_NOPROCSUB; + + temp = (char *)NULL; + diff --git a/utils/bash/patches/108-upstream-bash43-008.patch b/utils/bash/patches/108-upstream-bash43-008.patch deleted file mode 100644 index 2402021696..0000000000 --- a/utils/bash/patches/108-upstream-bash43-008.patch +++ /dev/null @@ -1,148 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-008 - -Bug-Reported-by: Stephane Chazelas -Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html - -Bug-Description: - -Some extended glob patterns incorrectly matched filenames with a leading -dot, regardless of the setting of the `dotglob' option. - -Patch (apply with `patch -p0'): - ---- a/lib/glob/gmisc.c -+++ b/lib/glob/gmisc.c -@@ -210,6 +210,7 @@ extglob_pattern_p (pat) - case '+': - case '!': - case '@': -+ case '?': - return (pat[1] == LPAREN); - default: - return 0; ---- a/lib/glob/glob.c -+++ b/lib/glob/glob.c -@@ -179,42 +179,50 @@ extglob_skipname (pat, dname, flags) - char *pat, *dname; - int flags; - { -- char *pp, *pe, *t; -- int n, r; -+ char *pp, *pe, *t, *se; -+ int n, r, negate; - -+ negate = *pat == '!'; - pp = pat + 2; -- pe = pp + strlen (pp) - 1; /*(*/ -- if (*pe != ')') -- return 0; -- if ((t = strchr (pp, '|')) == 0) /* easy case first */ -+ se = pp + strlen (pp) - 1; /* end of string */ -+ pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ -+ /* we should check for invalid extglob pattern here */ -+ /* if pe != se we have more of the pattern at the end of the extglob -+ pattern. Check the easy case first ( */ -+ if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) - { - *pe = '\0'; -+#if defined (HANDLE_MULTIBYTE) -+ r = mbskipname (pp, dname, flags); -+#else - r = skipname (pp, dname, flags); /*(*/ -+#endif - *pe = ')'; - return r; - } -+ -+ /* check every subpattern */ - while (t = glob_patscan (pp, pe, '|')) - { - n = t[-1]; - t[-1] = '\0'; -+#if defined (HANDLE_MULTIBYTE) -+ r = mbskipname (pp, dname, flags); -+#else - r = skipname (pp, dname, flags); -+#endif - t[-1] = n; - if (r == 0) /* if any pattern says not skip, we don't skip */ - return r; - pp = t; - } /*(*/ - -- if (pp == pe) /* glob_patscan might find end of pattern */ -+ /* glob_patscan might find end of pattern */ -+ if (pp == se) - return r; - -- *pe = '\0'; --# if defined (HANDLE_MULTIBYTE) -- r = mbskipname (pp, dname, flags); /*(*/ --# else -- r = skipname (pp, dname, flags); /*(*/ --# endif -- *pe = ')'; -- return r; -+ /* but if it doesn't then we didn't match a leading dot */ -+ return 0; - } - #endif - -@@ -277,20 +285,23 @@ wextglob_skipname (pat, dname, flags) - int flags; - { - #if EXTENDED_GLOB -- wchar_t *pp, *pe, *t, n; -- int r; -+ wchar_t *pp, *pe, *t, n, *se; -+ int r, negate; - -+ negate = *pat == L'!'; - pp = pat + 2; -- pe = pp + wcslen (pp) - 1; /*(*/ -- if (*pe != L')') -- return 0; -- if ((t = wcschr (pp, L'|')) == 0) -+ se = pp + wcslen (pp) - 1; /*(*/ -+ pe = glob_patscan_wc (pp, se, 0); -+ -+ if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0) - { - *pe = L'\0'; - r = wchkname (pp, dname); /*(*/ - *pe = L')'; - return r; - } -+ -+ /* check every subpattern */ - while (t = glob_patscan_wc (pp, pe, '|')) - { - n = t[-1]; -@@ -305,10 +316,8 @@ wextglob_skipname (pat, dname, flags) - if (pp == pe) /* glob_patscan_wc might find end of pattern */ - return r; - -- *pe = L'\0'; -- r = wchkname (pp, dname); /*(*/ -- *pe = L')'; -- return r; -+ /* but if it doesn't then we didn't match a leading dot */ -+ return 0; - #else - return (wchkname (pat, dname)); - #endif ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 7 -+#define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/108-upstream-bash44-008.patch b/utils/bash/patches/108-upstream-bash44-008.patch new file mode 100644 index 0000000000..9503b0502b --- /dev/null +++ b/utils/bash/patches/108-upstream-bash44-008.patch @@ -0,0 +1,58 @@ +Index: bash-4.4/expr.c +=================================================================== +--- bash-4.4.orig/expr.c ++++ bash-4.4/expr.c +@@ -578,24 +578,23 @@ expcond () + rval = cval = explor (); + if (curtok == QUES) /* found conditional expr */ + { +- readtok (); +- if (curtok == 0 || curtok == COL) +- evalerror (_("expression expected")); + if (cval == 0) + { + set_noeval = 1; + noeval++; + } + ++ readtok (); ++ if (curtok == 0 || curtok == COL) ++ evalerror (_("expression expected")); ++ + val1 = EXP_HIGHEST (); + + if (set_noeval) + noeval--; + if (curtok != COL) + evalerror (_("`:' expected for conditional expression")); +- readtok (); +- if (curtok == 0) +- evalerror (_("expression expected")); ++ + set_noeval = 0; + if (cval) + { +@@ -603,7 +602,11 @@ expcond () + noeval++; + } + ++ readtok (); ++ if (curtok == 0) ++ evalerror (_("expression expected")); + val2 = expcond (); ++ + if (set_noeval) + noeval--; + rval = cval ? val1 : val2; +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 7 ++#define PATCHLEVEL 8 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/109-upstream-bash43-009.patch b/utils/bash/patches/109-upstream-bash43-009.patch deleted file mode 100644 index f222bd6778..0000000000 --- a/utils/bash/patches/109-upstream-bash43-009.patch +++ /dev/null @@ -1,51 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-009 - -Bug-Reported-by: Matthias Klose -Bug-Reference-ID: <53346FC8.6090005@debian.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00171.html - -Bug-Description: - -There is a problem with unsigned sign extension when attempting to reallocate -the input line when it is fewer than 3 characters long and there has been a -history expansion. The sign extension causes the shell to not reallocate the -line, which results in a segmentation fault when it writes past the end. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -2424,7 +2424,7 @@ shell_getc (remove_quoted_newline) - not already end in an EOF character. */ - if (shell_input_line_terminator != EOF) - { -- if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) -+ if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) - shell_input_line = (char *)xrealloc (shell_input_line, - 1 + (shell_input_line_size += 2)); - ---- a/y.tab.c -+++ b/y.tab.c -@@ -4736,7 +4736,7 @@ shell_getc (remove_quoted_newline) - not already end in an EOF character. */ - if (shell_input_line_terminator != EOF) - { -- if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3) -+ if (shell_input_line_size < SIZE_MAX-3 && (shell_input_line_len+3 > shell_input_line_size)) - shell_input_line = (char *)xrealloc (shell_input_line, - 1 + (shell_input_line_size += 2)); - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 8 -+#define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/109-upstream-bash44-009.patch b/utils/bash/patches/109-upstream-bash44-009.patch new file mode 100644 index 0000000000..580d9a2f99 --- /dev/null +++ b/utils/bash/patches/109-upstream-bash44-009.patch @@ -0,0 +1,67 @@ +Index: bash-4.4/lib/readline/history.c +=================================================================== +--- bash-4.4.orig/lib/readline/history.c ++++ bash-4.4/lib/readline/history.c +@@ -279,6 +279,7 @@ add_history (string) + const char *string; + { + HIST_ENTRY *temp; ++ int new_length; + + if (history_stifled && (history_length == history_max_entries)) + { +@@ -295,13 +296,9 @@ add_history (string) + + /* Copy the rest of the entries, moving down one slot. Copy includes + trailing NULL. */ +-#if 0 +- for (i = 0; i < history_length; i++) +- the_history[i] = the_history[i + 1]; +-#else + memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *)); +-#endif + ++ new_length = history_length; + history_base++; + } + else +@@ -315,7 +312,7 @@ add_history (string) + else + history_size = DEFAULT_HISTORY_INITIAL_SIZE; + the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); +- history_length = 1; ++ new_length = 1; + } + else + { +@@ -325,14 +322,15 @@ add_history (string) + the_history = (HIST_ENTRY **) + xrealloc (the_history, history_size * sizeof (HIST_ENTRY *)); + } +- history_length++; ++ new_length = history_length + 1; + } + } + + temp = alloc_history_entry ((char *)string, hist_inittime ()); + +- the_history[history_length] = (HIST_ENTRY *)NULL; +- the_history[history_length - 1] = temp; ++ the_history[new_length] = (HIST_ENTRY *)NULL; ++ the_history[new_length - 1] = temp; ++ history_length = new_length; + } + + /* Change the time stamp of the most recent history entry to STRING. */ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 8 ++#define PATCHLEVEL 9 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/110-upstream-bash43-010.patch b/utils/bash/patches/110-upstream-bash43-010.patch deleted file mode 100644 index 22d9f1ba2e..0000000000 --- a/utils/bash/patches/110-upstream-bash43-010.patch +++ /dev/null @@ -1,145 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-010 - -Bug-Reported-by: Albert Shih -Bug-Reference-ID: Wed, 5 Mar 2014 23:01:40 +0100 -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00028.html - -Bug-Description: - -Patch (apply with `patch -p0'): - -This patch changes the behavior of programmable completion to compensate -for two assumptions made by the bash-completion package. Bash-4.3 changed -to dequote the argument to programmable completion only under certain -circumstances, to make the behavior of compgen more consistent when run -from the command line -- closer to the behavior when run by a shell function -run as part of programmable completion. Bash-completion can pass quoted -arguments to compgen when the original word to be completed was not quoted, -expecting programmable completion to dequote the word before attempting -completion. - -This patch fixes two cases: - -1. An empty string that bash-completion passes to compgen as a quoted null - string (''). - -2. An unquoted word that bash-completion quotes using single quotes or - backslashes before passing it to compgen. - -In these cases, since readline did not detect a quote character in the original -word to be completed, bash-4.3 - ---- a/externs.h -+++ b/externs.h -@@ -324,6 +324,7 @@ extern char *sh_un_double_quote __P((cha - extern char *sh_backslash_quote __P((char *, const char *, int)); - extern char *sh_backslash_quote_for_double_quotes __P((char *)); - extern int sh_contains_shell_metas __P((char *)); -+extern int sh_contains_quotes __P((char *)); - - /* declarations for functions defined in lib/sh/spell.c */ - extern int spname __P((char *, char *)); ---- a/lib/sh/shquote.c -+++ b/lib/sh/shquote.c -@@ -311,3 +311,17 @@ sh_contains_shell_metas (string) - - return (0); - } -+ -+int -+sh_contains_quotes (string) -+ char *string; -+{ -+ char *s; -+ -+ for (s = string; s && *s; s++) -+ { -+ if (*s == '\'' || *s == '"' || *s == '\\') -+ return 1; -+ } -+ return 0; -+} ---- a/pcomplete.c -+++ b/pcomplete.c -@@ -183,6 +183,7 @@ ITEMLIST it_variables = { LIST_DYNAMIC, - - COMPSPEC *pcomp_curcs; - const char *pcomp_curcmd; -+const char *pcomp_curtxt; - - #ifdef DEBUG - /* Debugging code */ -@@ -753,6 +754,32 @@ pcomp_filename_completion_function (text - quoted strings. */ - dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); - } -+ /* Intended to solve a mismatched assumption by bash-completion. If -+ the text to be completed is empty, but bash-completion turns it into -+ a quoted string ('') assuming that this code will dequote it before -+ calling readline, do the dequoting. */ -+ else if (iscompgen && iscompleting && -+ pcomp_curtxt && *pcomp_curtxt == 0 && -+ text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && -+ rl_filename_dequoting_function) -+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); -+ /* Another mismatched assumption by bash-completion. If compgen is being -+ run as part of bash-completion, and the argument to compgen is not -+ the same as the word originally passed to the programmable completion -+ code, dequote the argument if it has quote characters. It's an -+ attempt to detect when bash-completion is quoting its filename -+ argument before calling compgen. */ -+ /* We could check whether gen_shell_function_matches is in the call -+ stack by checking whether the gen-shell-function-matches tag is in -+ the unwind-protect stack, but there's no function to do that yet. -+ We could simply check whether we're executing in a function by -+ checking variable_context, and may end up doing that. */ -+ else if (iscompgen && iscompleting && rl_filename_dequoting_function && -+ pcomp_curtxt && text && -+ STREQ (pcomp_curtxt, text) == 0 && -+ variable_context && -+ sh_contains_quotes (text)) /* guess */ -+ dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); - else - dfn = savestring (text); - } -@@ -1522,7 +1549,7 @@ gen_progcomp_completions (ocmd, cmd, wor - COMPSPEC **lastcs; - { - COMPSPEC *cs, *oldcs; -- const char *oldcmd; -+ const char *oldcmd, *oldtxt; - STRINGLIST *ret; - - cs = progcomp_search (ocmd); -@@ -1545,14 +1572,17 @@ gen_progcomp_completions (ocmd, cmd, wor - - oldcs = pcomp_curcs; - oldcmd = pcomp_curcmd; -+ oldtxt = pcomp_curtxt; - - pcomp_curcs = cs; - pcomp_curcmd = cmd; -+ pcomp_curtxt = word; - - ret = gen_compspec_completions (cs, cmd, word, start, end, foundp); - - pcomp_curcs = oldcs; - pcomp_curcmd = oldcmd; -+ pcomp_curtxt = oldtxt; - - /* We need to conditionally handle setting *retryp here */ - if (retryp) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 9 -+#define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/110-upstream-bash44-010.patch b/utils/bash/patches/110-upstream-bash44-010.patch new file mode 100644 index 0000000000..1636b76e7a --- /dev/null +++ b/utils/bash/patches/110-upstream-bash44-010.patch @@ -0,0 +1,26 @@ +Index: bash-4.4/builtins/read.def +=================================================================== +--- bash-4.4.orig/builtins/read.def ++++ bash-4.4/builtins/read.def +@@ -181,7 +181,8 @@ read_builtin (list) + WORD_LIST *list; + { + register char *varname; +- int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; ++ int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; ++ volatile int i; + int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; + int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno; + unsigned int tmsec, tmusec; +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 9 ++#define PATCHLEVEL 10 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/111-upstream-bash43-011.patch b/utils/bash/patches/111-upstream-bash43-011.patch deleted file mode 100644 index b4c181a304..0000000000 --- a/utils/bash/patches/111-upstream-bash43-011.patch +++ /dev/null @@ -1,40 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-011 - -Bug-Reported-by: Egmont Koblinger -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00153.html - -Bug-Description: - -The signal handling changes to bash and readline (to avoid running any code -in a signal handler context) cause the cursor to be placed on the wrong -line of a multi-line command after a ^C interrupts editing. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/display.c -+++ b/lib/readline/display.c -@@ -2677,7 +2677,8 @@ _rl_clean_up_for_exit () - { - if (_rl_echoing_p) - { -- _rl_move_vert (_rl_vis_botlin); -+ if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */ -+ _rl_move_vert (_rl_vis_botlin); - _rl_vis_botlin = 0; - fflush (rl_outstream); - rl_restart_output (1, 0); ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 10 -+#define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/111-upstream-bash44-011.patch b/utils/bash/patches/111-upstream-bash44-011.patch new file mode 100644 index 0000000000..b6ea030465 --- /dev/null +++ b/utils/bash/patches/111-upstream-bash44-011.patch @@ -0,0 +1,26 @@ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 10 ++#define PATCHLEVEL 11 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/sig.c +=================================================================== +--- bash-4.4.orig/sig.c ++++ bash-4.4/sig.c +@@ -585,7 +585,8 @@ termsig_handler (sig) + #if defined (JOB_CONTROL) + if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)))) + hangup_all_jobs (); +- end_job_control (); ++ if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0) ++ end_job_control (); + #endif /* JOB_CONTROL */ + + #if defined (PROCESS_SUBSTITUTION) diff --git a/utils/bash/patches/112-upstream-bash43-012.patch b/utils/bash/patches/112-upstream-bash43-012.patch deleted file mode 100644 index 8fd2ea6710..0000000000 --- a/utils/bash/patches/112-upstream-bash43-012.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-012 - -Bug-Reported-by: Eduardo A. Bustamante López -Bug-Reference-ID: <5346B54C.4070205@case.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00051.html - -Bug-Description: - -When a SIGCHLD trap runs a command containing a shell builtin while -a script is running `wait' to wait for all running children to complete, -the SIGCHLD trap will not be run once for each child that terminates. - -Patch (apply with `patch -p0'): - ---- a/jobs.c -+++ b/jobs.c -@@ -3597,6 +3597,7 @@ run_sigchld_trap (nchild) - unwind_protect_int (jobs_list_frozen); - unwind_protect_pointer (the_pipeline); - unwind_protect_pointer (subst_assign_varlist); -+ unwind_protect_pointer (this_shell_builtin); - - /* We have to add the commands this way because they will be run - in reverse order of adding. We don't want maybe_set_sigchld_trap () ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 11 -+#define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/112-upstream-bash44-012.patch b/utils/bash/patches/112-upstream-bash44-012.patch new file mode 100644 index 0000000000..83d239e48d --- /dev/null +++ b/utils/bash/patches/112-upstream-bash44-012.patch @@ -0,0 +1,106 @@ +Index: bash-4.4/patchlevel.h +=================================================================== +--- bash-4.4.orig/patchlevel.h ++++ bash-4.4/patchlevel.h +@@ -25,6 +25,6 @@ + regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh + looks for to find the patch level (for the sccs version string). */ + +-#define PATCHLEVEL 11 ++#define PATCHLEVEL 12 + + #endif /* _PATCHLEVEL_H_ */ +Index: bash-4.4/subst.c +=================================================================== +--- bash-4.4.orig/subst.c ++++ bash-4.4/subst.c +@@ -2825,11 +2825,15 @@ list_string (string, separators, quoted) + + /* Parse a single word from STRING, using SEPARATORS to separate fields. + ENDPTR is set to the first character after the word. This is used by +- the `read' builtin. This is never called with SEPARATORS != $IFS; +- it should be simplified. ++ the `read' builtin. ++ ++ This is never called with SEPARATORS != $IFS, and takes advantage of that. + + XXX - this function is very similar to list_string; they should be + combined - XXX */ ++ ++#define islocalsep(c) (local_cmap[(unsigned char)(c)] != 0) ++ + char * + get_word_from_string (stringp, separators, endptr) + char **stringp, *separators, **endptr; +@@ -2837,6 +2841,7 @@ get_word_from_string (stringp, separator + register char *s; + char *current_word; + int sindex, sh_style_split, whitesep, xflags; ++ unsigned char local_cmap[UCHAR_MAX+1]; /* really only need single-byte chars here */ + size_t slen; + + if (!stringp || !*stringp || !**stringp) +@@ -2846,20 +2851,23 @@ get_word_from_string (stringp, separator + separators[1] == '\t' && + separators[2] == '\n' && + separators[3] == '\0'; +- for (xflags = 0, s = ifs_value; s && *s; s++) ++ memset (local_cmap, '\0', sizeof (local_cmap)); ++ for (xflags = 0, s = separators; s && *s; s++) + { + if (*s == CTLESC) xflags |= SX_NOCTLESC; + if (*s == CTLNUL) xflags |= SX_NOESCCTLNUL; ++ local_cmap[(unsigned char)*s] = 1; /* local charmap of separators */ + } + + s = *stringp; + slen = 0; + + /* Remove sequences of whitespace at the beginning of STRING, as +- long as those characters appear in IFS. */ +- if (sh_style_split || !separators || !*separators) ++ long as those characters appear in SEPARATORS. This happens if ++ SEPARATORS == $' \t\n' or if IFS is unset. */ ++ if (sh_style_split || separators == 0) + { +- for (; *s && spctabnl (*s) && isifs (*s); s++); ++ for (; *s && spctabnl (*s) && islocalsep (*s); s++); + + /* If the string is nothing but whitespace, update it and return. */ + if (!*s) +@@ -2878,9 +2886,9 @@ get_word_from_string (stringp, separator + + This obeys the field splitting rules in Posix.2. */ + sindex = 0; +- /* Don't need string length in ADVANCE_CHAR or string_extract_verbatim +- unless multibyte chars are possible. */ +- slen = (MB_CUR_MAX > 1) ? STRLEN (s) : 1; ++ /* Don't need string length in ADVANCE_CHAR unless multibyte chars are ++ possible, but need it in string_extract_verbatim for bounds checking */ ++ slen = STRLEN (s); + current_word = string_extract_verbatim (s, slen, &sindex, separators, xflags); + + /* Set ENDPTR to the first character after the end of the word. */ +@@ -2899,19 +2907,19 @@ get_word_from_string (stringp, separator + + /* Now skip sequences of space, tab, or newline characters if they are + in the list of separators. */ +- while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) ++ while (s[sindex] && spctabnl (s[sindex]) && islocalsep (s[sindex])) + sindex++; + + /* If the first separator was IFS whitespace and the current character is + a non-whitespace IFS character, it should be part of the current field + delimiter, not a separate delimiter that would result in an empty field. + Look at POSIX.2, 3.6.5, (3)(b). */ +- if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex])) ++ if (s[sindex] && whitesep && islocalsep (s[sindex]) && !spctabnl (s[sindex])) + { + sindex++; + /* An IFS character that is not IFS white space, along with any adjacent + IFS white space, shall delimit a field. */ +- while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex])) ++ while (s[sindex] && spctabnl (s[sindex]) && islocalsep(s[sindex])) + sindex++; + } + diff --git a/utils/bash/patches/113-upstream-bash43-013.patch b/utils/bash/patches/113-upstream-bash43-013.patch deleted file mode 100644 index 63c6c1edf7..0000000000 --- a/utils/bash/patches/113-upstream-bash43-013.patch +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-013 - -Bug-Reported-by: -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00069.html - -Bug-Description: - -Using reverse-i-search when horizontal scrolling is enabled does not redisplay -the entire line containing the successful search results. - -Patch (apply with `patch -p0'): ---- a/lib/readline/display.c -+++ b/lib/readline/display.c -@@ -1637,7 +1637,7 @@ update_line (old, new, current_line, oma - /* If we are changing the number of invisible characters in a line, and - the spot of first difference is before the end of the invisible chars, - lendiff needs to be adjusted. */ -- if (current_line == 0 && !_rl_horizontal_scroll_mode && -+ if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */ - current_invis_chars != visible_wrap_offset) - { - if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) -@@ -1825,8 +1825,13 @@ update_line (old, new, current_line, oma - else - _rl_last_c_pos += bytes_to_insert; - -+ /* XXX - we only want to do this if we are at the end of the line -+ so we move there with _rl_move_cursor_relative */ - if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) -- goto clear_rest_of_line; -+ { -+ _rl_move_cursor_relative (ne-new, new); -+ goto clear_rest_of_line; -+ } - } - } - /* Otherwise, print over the existing material. */ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 12 -+#define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/114-upstream-bash43-014.patch b/utils/bash/patches/114-upstream-bash43-014.patch deleted file mode 100644 index 99e16b9a79..0000000000 --- a/utils/bash/patches/114-upstream-bash43-014.patch +++ /dev/null @@ -1,95 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-014 - -Bug-Reported-by: Greg Wooledge -Bug-Reference-ID: <20140418202123.GB7660@eeg.ccf.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/help-bash/2014-04/msg00004.html - -Bug-Description: - -Under certain circumstances, $@ is expanded incorrectly in contexts where -word splitting is not performed. - -Patch (apply with `patch -p0'): ---- a/subst.c -+++ b/subst.c -@@ -3248,8 +3248,10 @@ cond_expand_word (w, special) - if (w->word == 0 || w->word[0] == '\0') - return ((char *)NULL); - -+ expand_no_split_dollar_star = 1; - w->flags |= W_NOSPLIT2; - l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0); -+ expand_no_split_dollar_star = 0; - if (l) - { - if (special == 0) /* LHS */ -@@ -7847,6 +7849,10 @@ param_expand (string, sindex, quoted, ex - We also want to make sure that splitting is done no matter what -- - according to POSIX.2, this expands to a list of the positional - parameters no matter what IFS is set to. */ -+ /* XXX - what to do when in a context where word splitting is not -+ performed? Even when IFS is not the default, posix seems to imply -+ that we behave like unquoted $* ? Maybe we should use PF_NOSPLIT2 -+ here. */ - temp = string_list_dollar_at (list, (pflags & PF_ASSIGNRHS) ? (quoted|Q_DOUBLE_QUOTES) : quoted); - - tflag |= W_DOLLARAT; -@@ -8816,6 +8822,7 @@ finished_with_string: - else - { - char *ifs_chars; -+ char *tstring; - - ifs_chars = (quoted_dollar_at || has_dollar_at) ? ifs_value : (char *)NULL; - -@@ -8830,11 +8837,36 @@ finished_with_string: - regardless of what else has happened to IFS since the expansion. */ - if (split_on_spaces) - list = list_string (istring, " ", 1); /* XXX quoted == 1? */ -+ /* If we have $@ (has_dollar_at != 0) and we are in a context where we -+ don't want to split the result (W_NOSPLIT2), and we are not quoted, -+ we have already separated the arguments with the first character of -+ $IFS. In this case, we want to return a list with a single word -+ with the separator possibly replaced with a space (it's what other -+ shells seem to do). -+ quoted_dollar_at is internal to this function and is set if we are -+ passed an argument that is unquoted (quoted == 0) but we encounter a -+ double-quoted $@ while expanding it. */ -+ else if (has_dollar_at && quoted_dollar_at == 0 && ifs_chars && quoted == 0 && (word->flags & W_NOSPLIT2)) -+ { -+ /* Only split and rejoin if we have to */ -+ if (*ifs_chars && *ifs_chars != ' ') -+ { -+ list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); -+ tstring = string_list (list); -+ } -+ else -+ tstring = istring; -+ tword = make_bare_word (tstring); -+ if (tstring != istring) -+ free (tstring); -+ goto set_word_flags; -+ } - else if (has_dollar_at && ifs_chars) - list = list_string (istring, *ifs_chars ? ifs_chars : " ", 1); - else - { - tword = make_bare_word (istring); -+set_word_flags: - if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED)) - tword->flags |= W_QUOTED; - if (word->flags & W_ASSIGNMENT) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 13 -+#define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/115-upstream-bash43-015.patch b/utils/bash/patches/115-upstream-bash43-015.patch deleted file mode 100644 index ae8be2d9b5..0000000000 --- a/utils/bash/patches/115-upstream-bash43-015.patch +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-015 - -Bug-Reported-by: Clark Wang -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00095.html - -Bug-Description: - -When completing directory names, the directory name is dequoted twice. -This causes problems for directories with single and double quotes in -their names. - -Patch (apply with `patch -p0'): ---- a/bashline.c -+++ b/bashline.c -@@ -4167,9 +4167,16 @@ bash_directory_completion_matches (text) - int qc; - - qc = rl_dispatching ? rl_completion_quote_character : 0; -- dfn = bash_dequote_filename ((char *)text, qc); -+ /* If rl_completion_found_quote != 0, rl_completion_matches will call the -+ filename dequoting function, causing the directory name to be dequoted -+ twice. */ -+ if (rl_dispatching && rl_completion_found_quote == 0) -+ dfn = bash_dequote_filename ((char *)text, qc); -+ else -+ dfn = (char *)text; - m1 = rl_completion_matches (dfn, rl_filename_completion_function); -- free (dfn); -+ if (dfn != text) -+ free (dfn); - - if (m1 == 0 || m1[0] == 0) - return m1; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 14 -+#define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/116-upstream-bash43-016.patch b/utils/bash/patches/116-upstream-bash43-016.patch deleted file mode 100644 index 3ce37f621a..0000000000 --- a/utils/bash/patches/116-upstream-bash43-016.patch +++ /dev/null @@ -1,121 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-016 - -Bug-Reported-by: Pierre Gaston -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00100.html - -Bug-Description: - -An extended glob pattern containing a slash (`/') causes the globbing code -to misinterpret it as a directory separator. - -Patch (apply with `patch -p0'): ---- a/lib/glob/glob.c -+++ b/lib/glob/glob.c -@@ -123,6 +123,8 @@ static char **glob_dir_to_array __P((cha - extern char *glob_patscan __P((char *, char *, int)); - extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int)); - -+extern char *glob_dirscan __P((char *, int)); -+ - /* Compile `glob_loop.c' for single-byte characters. */ - #define CHAR unsigned char - #define INT int -@@ -187,6 +189,9 @@ extglob_skipname (pat, dname, flags) - se = pp + strlen (pp) - 1; /* end of string */ - pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ - /* we should check for invalid extglob pattern here */ -+ if (pe == 0) -+ return 0; -+ - /* if pe != se we have more of the pattern at the end of the extglob - pattern. Check the easy case first ( */ - if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) -@@ -1015,7 +1020,7 @@ glob_filename (pathname, flags) - { - char **result; - unsigned int result_size; -- char *directory_name, *filename, *dname; -+ char *directory_name, *filename, *dname, *fn; - unsigned int directory_len; - int free_dirname; /* flag */ - int dflags; -@@ -1031,6 +1036,18 @@ glob_filename (pathname, flags) - - /* Find the filename. */ - filename = strrchr (pathname, '/'); -+#if defined (EXTENDED_GLOB) -+ if (filename && extended_glob) -+ { -+ fn = glob_dirscan (pathname, '/'); -+#if DEBUG_MATCHING -+ if (fn != filename) -+ fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename); -+#endif -+ filename = fn; -+ } -+#endif -+ - if (filename == NULL) - { - filename = pathname; ---- a/lib/glob/gmisc.c -+++ b/lib/glob/gmisc.c -@@ -42,6 +42,8 @@ - #define WLPAREN L'(' - #define WRPAREN L')' - -+extern char *glob_patscan __P((char *, char *, int)); -+ - /* Return 1 of the first character of WSTRING could match the first - character of pattern WPAT. Wide character version. */ - int -@@ -375,3 +377,34 @@ bad_bracket: - - return matlen; - } -+ -+/* Skip characters in PAT and return the final occurrence of DIRSEP. This -+ is only called when extended_glob is set, so we have to skip over extglob -+ patterns x(...) */ -+char * -+glob_dirscan (pat, dirsep) -+ char *pat; -+ int dirsep; -+{ -+ char *p, *d, *pe, *se; -+ -+ d = pe = se = 0; -+ for (p = pat; p && *p; p++) -+ { -+ if (extglob_pattern_p (p)) -+ { -+ if (se == 0) -+ se = p + strlen (p) - 1; -+ pe = glob_patscan (p + 2, se, 0); -+ if (pe == 0) -+ continue; -+ else if (*pe == 0) -+ break; -+ p = pe - 1; /* will do increment above */ -+ continue; -+ } -+ if (*p == dirsep) -+ d = p; -+ } -+ return d; -+} ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 15 -+#define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/117-upstream-bash43-017.patch b/utils/bash/patches/117-upstream-bash43-017.patch deleted file mode 100644 index 9c7eecc952..0000000000 --- a/utils/bash/patches/117-upstream-bash43-017.patch +++ /dev/null @@ -1,41 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-017 - -Bug-Reported-by: Dan Douglas -Bug-Reference-ID: <7781746.RhfoTROLxF@smorgbox> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00026.html - -Bug-Description: - -The code that creates local variables should not clear the `invisible' -attribute when returning an existing local variable. Let the code that -actually assigns a value clear it. - -Patch (apply with `patch -p0'): ---- a/variables.c -+++ b/variables.c -@@ -2197,10 +2197,7 @@ make_local_variable (name) - /* local foo; local foo; is a no-op. */ - old_var = find_variable (name); - if (old_var && local_p (old_var) && old_var->context == variable_context) -- { -- VUNSETATTR (old_var, att_invisible); /* XXX */ -- return (old_var); -- } -+ return (old_var); - - was_tmpvar = old_var && tempvar_p (old_var); - /* If we're making a local variable in a shell function, the temporary env ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 16 -+#define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/118-upstream-bash43-018.patch b/utils/bash/patches/118-upstream-bash43-018.patch deleted file mode 100644 index 095ca9326f..0000000000 --- a/utils/bash/patches/118-upstream-bash43-018.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-018 - -Bug-Reported-by: Geir Hauge -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-05/msg00040.html - -Bug-Description: - -When assigning an array variable using the compound assignment syntax, -but using `declare' with the rhs of the compound assignment quoted, the -shell did not mark the variable as visible after successfully performing -the assignment. - -Patch (apply with `patch -p0'): ---- a/arrayfunc.c -+++ b/arrayfunc.c -@@ -179,6 +179,7 @@ bind_array_var_internal (entry, ind, key - array_insert (array_cell (entry), ind, newval); - FREE (newval); - -+ VUNSETATTR (entry, att_invisible); /* no longer invisible */ - return (entry); - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 17 -+#define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/119-upstream-bash43-019.patch b/utils/bash/patches/119-upstream-bash43-019.patch deleted file mode 100644 index 2d0fa440d6..0000000000 --- a/utils/bash/patches/119-upstream-bash43-019.patch +++ /dev/null @@ -1,75 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-019 - -Bug-Reported-by: John Lenton -Bug-Reference-ID: -Bug-Reference-URL: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476 - -Bug-Description: - -The -t timeout option to `read' does not work when the -e option is used. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/input.c -+++ b/lib/readline/input.c -@@ -534,8 +534,16 @@ rl_getc (stream) - return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); - else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM) - return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); -+ /* keyboard-generated signals of interest */ - else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT) - RL_CHECK_SIGNALS (); -+ /* non-keyboard-generated signals of interest */ -+ else if (_rl_caught_signal == SIGALRM -+#if defined (SIGVTALRM) -+ || _rl_caught_signal == SIGVTALRM -+#endif -+ ) -+ RL_CHECK_SIGNALS (); - - if (rl_signal_event_hook) - (*rl_signal_event_hook) (); ---- a/builtins/read.def -+++ b/builtins/read.def -@@ -442,7 +442,10 @@ read_builtin (list) - add_unwind_protect (reset_alarm, (char *)NULL); - #if defined (READLINE) - if (edit) -- add_unwind_protect (reset_attempted_completion_function, (char *)NULL); -+ { -+ add_unwind_protect (reset_attempted_completion_function, (char *)NULL); -+ add_unwind_protect (bashline_reset_event_hook, (char *)NULL); -+ } - #endif - falarm (tmsec, tmusec); - } -@@ -1021,6 +1024,7 @@ edit_line (p, itext) - - old_attempted_completion_function = rl_attempted_completion_function; - rl_attempted_completion_function = (rl_completion_func_t *)NULL; -+ bashline_set_event_hook (); - if (itext) - { - old_startup_hook = rl_startup_hook; -@@ -1032,6 +1036,7 @@ edit_line (p, itext) - - rl_attempted_completion_function = old_attempted_completion_function; - old_attempted_completion_function = (rl_completion_func_t *)NULL; -+ bashline_reset_event_hook (); - - if (ret == 0) - return ret; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 18 -+#define PATCHLEVEL 19 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/120-upstream-bash43-020.patch b/utils/bash/patches/120-upstream-bash43-020.patch deleted file mode 100644 index abf0c30189..0000000000 --- a/utils/bash/patches/120-upstream-bash43-020.patch +++ /dev/null @@ -1,93 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-020 - -Bug-Reported-by: Jared Yanovich -Bug-Reference-ID: <20140417073654.GB26875@nightderanger.psc.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-04/msg00065.html - -Bug-Description: - -When PS2 contains a command substitution, here-documents entered in an -interactive shell can sometimes cause a segmentation fault. - -Patch (apply with `patch -p0'): - ---- a/shell.h -+++ b/shell.h -@@ -168,7 +168,8 @@ typedef struct _sh_parser_state_t { - /* flags state affecting the parser */ - int expand_aliases; - int echo_input_at_read; -- -+ int need_here_doc; -+ - } sh_parser_state_t; - - typedef struct _sh_input_line_state_t { ---- a/parse.y -+++ b/parse.y -@@ -2642,7 +2642,7 @@ gather_here_documents () - int r; - - r = 0; -- while (need_here_doc) -+ while (need_here_doc > 0) - { - parser_state |= PST_HEREDOC; - make_here_document (redir_stack[r++], line_number); -@@ -6075,6 +6075,7 @@ save_parser_state (ps) - - ps->expand_aliases = expand_aliases; - ps->echo_input_at_read = echo_input_at_read; -+ ps->need_here_doc = need_here_doc; - - ps->token = token; - ps->token_buffer_size = token_buffer_size; -@@ -6123,6 +6124,7 @@ restore_parser_state (ps) - - expand_aliases = ps->expand_aliases; - echo_input_at_read = ps->echo_input_at_read; -+ need_here_doc = ps->need_here_doc; - - FREE (token); - token = ps->token; ---- a/y.tab.c -+++ b/y.tab.c -@@ -4954,7 +4954,7 @@ gather_here_documents () - int r; - - r = 0; -- while (need_here_doc) -+ while (need_here_doc > 0) - { - parser_state |= PST_HEREDOC; - make_here_document (redir_stack[r++], line_number); -@@ -8387,6 +8387,7 @@ save_parser_state (ps) - - ps->expand_aliases = expand_aliases; - ps->echo_input_at_read = echo_input_at_read; -+ ps->need_here_doc = need_here_doc; - - ps->token = token; - ps->token_buffer_size = token_buffer_size; -@@ -8435,6 +8436,7 @@ restore_parser_state (ps) - - expand_aliases = ps->expand_aliases; - echo_input_at_read = ps->echo_input_at_read; -+ need_here_doc = ps->need_here_doc; - - FREE (token); - token = ps->token; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 19 -+#define PATCHLEVEL 20 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/121-upstream-bash43-021.patch b/utils/bash/patches/121-upstream-bash43-021.patch deleted file mode 100644 index b7367a080e..0000000000 --- a/utils/bash/patches/121-upstream-bash43-021.patch +++ /dev/null @@ -1,46 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-021 - -Bug-Reported-by: Jared Yanovich -Bug-Reference-ID: <20140625225019.GJ17044@nightderanger.psc.edu> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00070.html - -Bug-Description: - -When the readline `revert-all-at-newline' option is set, pressing newline -when the current line is one retrieved from history results in a double free -and a segmentation fault. - -Patch (apply with `patch -p0'): - ---- a/lib/readline/misc.c -+++ b/lib/readline/misc.c -@@ -461,6 +461,7 @@ _rl_revert_all_lines () - saved_undo_list = 0; - /* Set up rl_line_buffer and other variables from history entry */ - rl_replace_from_history (entry, 0); /* entry->line is now current */ -+ entry->data = 0; /* entry->data is now current undo list */ - /* Undo all changes to this history entry */ - while (rl_undo_list) - rl_do_undo (); -@@ -468,7 +469,6 @@ _rl_revert_all_lines () - the timestamp. */ - FREE (entry->line); - entry->line = savestring (rl_line_buffer); -- entry->data = 0; - } - entry = previous_history (); - } ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 20 -+#define PATCHLEVEL 21 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/122-upstream-bash43-022.patch b/utils/bash/patches/122-upstream-bash43-022.patch deleted file mode 100644 index 1ee8f13a10..0000000000 --- a/utils/bash/patches/122-upstream-bash43-022.patch +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-022 - -Bug-Reported-by: scorp.dev.null@gmail.com -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00061.html - -Bug-Description: - -Using nested pipelines within loops with the `lastpipe' option set can result -in a segmentation fault. - -Patch (apply with `patch -p0'): - ---- a/execute_cmd.c -+++ b/execute_cmd.c -@@ -2413,7 +2413,16 @@ execute_pipeline (command, asynchronous, - #endif - lstdin = wait_for (lastpid); - #if defined (JOB_CONTROL) -- exec_result = job_exit_status (lastpipe_jid); -+ /* If wait_for removes the job from the jobs table, use result of last -+ command as pipeline's exit status as usual. The jobs list can get -+ frozen and unfrozen at inconvenient times if there are multiple pipelines -+ running simultaneously. */ -+ if (INVALID_JOB (lastpipe_jid) == 0) -+ exec_result = job_exit_status (lastpipe_jid); -+ else if (pipefail_opt) -+ exec_result = exec_result | lstdin; /* XXX */ -+ /* otherwise we use exec_result */ -+ - #endif - unfreeze_jobs_list (); - } ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 21 -+#define PATCHLEVEL 22 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/123-upstream-bash43-023.patch b/utils/bash/patches/123-upstream-bash43-023.patch deleted file mode 100644 index 8684c13724..0000000000 --- a/utils/bash/patches/123-upstream-bash43-023.patch +++ /dev/null @@ -1,78 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-023 - -Bug-Reported-by: Tim Friske -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00056.html - -Bug-Description: - -Bash does not correctly parse process substitution constructs that contain -unbalanced parentheses as part of the contained command. - -Patch (apply with `patch -p0'): - ---- a/subst.h -+++ b/subst.h -@@ -82,7 +82,7 @@ extern char *extract_arithmetic_subst __ - /* Extract the <( or >( construct in STRING, and return a new string. - Start extracting at (SINDEX) as if we had just seen "<(". - Make (SINDEX) get the position just after the matching ")". */ --extern char *extract_process_subst __P((char *, char *, int *)); -+extern char *extract_process_subst __P((char *, char *, int *, int)); - #endif /* PROCESS_SUBSTITUTION */ - - /* Extract the name of the variable to bind to from the assignment string. */ ---- a/subst.c -+++ b/subst.c -@@ -1192,12 +1192,18 @@ extract_arithmetic_subst (string, sindex - Start extracting at (SINDEX) as if we had just seen "<(". - Make (SINDEX) get the position of the matching ")". */ /*))*/ - char * --extract_process_subst (string, starter, sindex) -+extract_process_subst (string, starter, sindex, xflags) - char *string; - char *starter; - int *sindex; -+ int xflags; - { -+#if 0 - return (extract_delimited_string (string, sindex, starter, "(", ")", SX_COMMAND)); -+#else -+ xflags |= (no_longjmp_on_fatal_error ? SX_NOLONGJMP : 0); -+ return (xparse_dolparen (string, string+*sindex, sindex, xflags)); -+#endif - } - #endif /* PROCESS_SUBSTITUTION */ - -@@ -1785,7 +1791,7 @@ skip_to_delim (string, start, delims, fl - si = i + 2; - if (string[si] == '\0') - CQ_RETURN(si); -- temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si); -+ temp = extract_process_subst (string, (c == '<') ? "<(" : ">(", &si, 0); - free (temp); /* no SX_ALLOC here */ - i = si; - if (string[i] == '\0') -@@ -8249,7 +8255,7 @@ add_string: - else - t_index = sindex + 1; /* skip past both '<' and LPAREN */ - -- temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index); /*))*/ -+ temp1 = extract_process_subst (string, (c == '<') ? "<(" : ">(", &t_index, 0); /*))*/ - sindex = t_index; - - /* If the process substitution specification is `<()', we want to ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 22 -+#define PATCHLEVEL 23 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/124-upstream-bash43-024.patch b/utils/bash/patches/124-upstream-bash43-024.patch deleted file mode 100644 index 79414550a1..0000000000 --- a/utils/bash/patches/124-upstream-bash43-024.patch +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-024 - -Bug-Reported-by: Corentin Peuvrel -Bug-Reference-ID: <53CE9E5D.6050203@pom-monitoring.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-07/msg00021.html - -Bug-Description: - -Indirect variable references do not work correctly if the reference -variable expands to an array reference using a subscript other than 0 -(e.g., foo='bar[1]' ; echo ${!foo}). - -Patch (apply with `patch -p0'): - ---- a/subst.c -+++ b/subst.c -@@ -7374,7 +7374,13 @@ parameter_brace_expand (string, indexp, - } - - if (want_indir) -- tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); -+ { -+ tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at); -+ /* Turn off the W_ARRAYIND flag because there is no way for this function -+ to return the index we're supposed to be using. */ -+ if (tdesc && tdesc->flags) -+ tdesc->flags &= ~W_ARRAYIND; -+ } - else - tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind); - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 23 -+#define PATCHLEVEL 24 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/125-upstream-bash43-025.patch b/utils/bash/patches/125-upstream-bash43-025.patch deleted file mode 100644 index 6b2ef4b3e4..0000000000 --- a/utils/bash/patches/125-upstream-bash43-025.patch +++ /dev/null @@ -1,110 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-025 - -Bug-Reported-by: Stephane Chazelas -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -Under certain circumstances, bash will execute user code while processing the -environment for exported function definitions. - -Patch (apply with `patch -p0'): - ---- a/builtins/common.h -+++ b/builtins/common.h -@@ -33,6 +33,8 @@ - #define SEVAL_RESETLINE 0x010 - #define SEVAL_PARSEONLY 0x020 - #define SEVAL_NOLONGJMP 0x040 -+#define SEVAL_FUNCDEF 0x080 /* only allow function definitions */ -+#define SEVAL_ONECMD 0x100 /* only allow a single command */ - - /* Flags for describe_command, shared between type.def and command.def */ - #define CDESC_ALL 0x001 /* type -a */ ---- a/builtins/evalstring.c -+++ b/builtins/evalstring.c -@@ -308,6 +308,14 @@ parse_and_execute (string, from_file, fl - { - struct fd_bitmap *bitmap; - -+ if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def) -+ { -+ internal_warning ("%s: ignoring function definition attempt", from_file); -+ should_jump_to_top_level = 0; -+ last_result = last_command_exit_value = EX_BADUSAGE; -+ break; -+ } -+ - bitmap = new_fd_bitmap (FD_BITMAP_SIZE); - begin_unwind_frame ("pe_dispose"); - add_unwind_protect (dispose_fd_bitmap, bitmap); -@@ -368,6 +376,9 @@ parse_and_execute (string, from_file, fl - dispose_command (command); - dispose_fd_bitmap (bitmap); - discard_unwind_frame ("pe_dispose"); -+ -+ if (flags & SEVAL_ONECMD) -+ break; - } - } - else ---- a/variables.c -+++ b/variables.c -@@ -358,13 +358,11 @@ initialize_shell_variables (env, privmod - temp_string[char_index] = ' '; - strcpy (temp_string + char_index + 1, string); - -- if (posixly_correct == 0 || legal_identifier (name)) -- parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST); -- -- /* Ancient backwards compatibility. Old versions of bash exported -- functions like name()=() {...} */ -- if (name[char_index - 1] == ')' && name[char_index - 2] == '(') -- name[char_index - 2] = '\0'; -+ /* Don't import function names that are invalid identifiers from the -+ environment, though we still allow them to be defined as shell -+ variables. */ -+ if (legal_identifier (name)) -+ parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); - - if (temp_var = find_function (name)) - { -@@ -381,10 +379,6 @@ initialize_shell_variables (env, privmod - last_command_exit_value = 1; - report_error (_("error importing function definition for `%s'"), name); - } -- -- /* ( */ -- if (name[char_index - 1] == ')' && name[char_index - 2] == '\0') -- name[char_index - 2] = '('; /* ) */ - } - #if defined (ARRAY_VARS) - # if ARRAY_EXPORT ---- a/subst.c -+++ b/subst.c -@@ -8047,7 +8047,9 @@ comsub: - - goto return0; - } -- else if (var = find_variable_last_nameref (temp1)) -+ else if (var && (invisible_p (var) || var_isset (var) == 0)) -+ temp = (char *)NULL; -+ else if ((var = find_variable_last_nameref (temp1)) && var_isset (var) && invisible_p (var) == 0) - { - temp = nameref_cell (var); - #if defined (ARRAY_VARS) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 24 -+#define PATCHLEVEL 25 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/126-upstream-bash43-026.patch b/utils/bash/patches/126-upstream-bash43-026.patch deleted file mode 100644 index e9535bebb4..0000000000 --- a/utils/bash/patches/126-upstream-bash43-026.patch +++ /dev/null @@ -1,54 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-026 - -Bug-Reported-by: Tavis Ormandy -Bug-Reference-ID: -Bug-Reference-URL: http://twitter.com/taviso/statuses/514887394294652929 - -Bug-Description: - -Under certain circumstances, bash can incorrectly save a lookahead character and -return it on a subsequent call, even when reading a new line. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -2953,6 +2953,8 @@ reset_parser () - FREE (word_desc_to_read); - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; - token_to_read = '\n'; ---- a/y.tab.c -+++ b/y.tab.c -@@ -5265,6 +5265,8 @@ reset_parser () - FREE (word_desc_to_read); - word_desc_to_read = (WORD_DESC *)NULL; - -+ eol_ungetc_lookahead = 0; -+ - current_token = '\n'; /* XXX */ - last_read_token = '\n'; - token_to_read = '\n'; -@@ -8539,4 +8541,3 @@ set_line_mbstate () - } - } - #endif /* HANDLE_MULTIBYTE */ -- ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 25 -+#define PATCHLEVEL 26 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/127-upstream-bash43-027.patch b/utils/bash/patches/127-upstream-bash43-027.patch deleted file mode 100644 index 6e8a51a206..0000000000 --- a/utils/bash/patches/127-upstream-bash43-027.patch +++ /dev/null @@ -1,176 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-027 - -Bug-Reported-by: Florian Weimer -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -This patch changes the encoding bash uses for exported functions to avoid -clashes with shell variables and to avoid depending only on an environment -variable's contents to determine whether or not to interpret it as a shell -function. - -Patch (apply with `patch -p0'): - ---- a/variables.c -+++ b/variables.c -@@ -83,6 +83,11 @@ - - #define ifsname(s) ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0') - -+#define BASHFUNC_PREFIX "BASH_FUNC_" -+#define BASHFUNC_PREFLEN 10 /* == strlen(BASHFUNC_PREFIX */ -+#define BASHFUNC_SUFFIX "%%" -+#define BASHFUNC_SUFFLEN 2 /* == strlen(BASHFUNC_SUFFIX) */ -+ - extern char **environ; - - /* Variables used here and defined in other files. */ -@@ -279,7 +284,7 @@ static void push_temp_var __P((PTR_T)); - static void propagate_temp_var __P((PTR_T)); - static void dispose_temporary_env __P((sh_free_func_t *)); - --static inline char *mk_env_string __P((const char *, const char *)); -+static inline char *mk_env_string __P((const char *, const char *, int)); - static char **make_env_array_from_var_list __P((SHELL_VAR **)); - static char **make_var_export_array __P((VAR_CONTEXT *)); - static char **make_func_export_array __P((void)); -@@ -349,22 +354,33 @@ initialize_shell_variables (env, privmod - - /* If exported function, define it now. Don't import functions from - the environment in privileged mode. */ -- if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4)) -+ if (privmode == 0 && read_but_dont_execute == 0 && -+ STREQN (BASHFUNC_PREFIX, name, BASHFUNC_PREFLEN) && -+ STREQ (BASHFUNC_SUFFIX, name + char_index - BASHFUNC_SUFFLEN) && -+ STREQN ("() {", string, 4)) - { -+ size_t namelen; -+ char *tname; /* desired imported function name */ -+ -+ namelen = char_index - BASHFUNC_PREFLEN - BASHFUNC_SUFFLEN; -+ -+ tname = name + BASHFUNC_PREFLEN; /* start of func name */ -+ tname[namelen] = '\0'; /* now tname == func name */ -+ - string_length = strlen (string); -- temp_string = (char *)xmalloc (3 + string_length + char_index); -+ temp_string = (char *)xmalloc (namelen + string_length + 2); - -- strcpy (temp_string, name); -- temp_string[char_index] = ' '; -- strcpy (temp_string + char_index + 1, string); -+ memcpy (temp_string, tname, namelen); -+ temp_string[namelen] = ' '; -+ memcpy (temp_string + namelen + 1, string, string_length + 1); - - /* Don't import function names that are invalid identifiers from the - environment, though we still allow them to be defined as shell - variables. */ -- if (legal_identifier (name)) -- parse_and_execute (temp_string, name, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); -+ if (absolute_program (tname) == 0 && (posixly_correct == 0 || legal_identifier (tname))) -+ parse_and_execute (temp_string, tname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_FUNCDEF|SEVAL_ONECMD); - -- if (temp_var = find_function (name)) -+ if (temp_var = find_function (tname)) - { - VSETATTR (temp_var, (att_exported|att_imported)); - array_needs_making = 1; -@@ -377,8 +393,11 @@ initialize_shell_variables (env, privmod - array_needs_making = 1; - } - last_command_exit_value = 1; -- report_error (_("error importing function definition for `%s'"), name); -+ report_error (_("error importing function definition for `%s'"), tname); - } -+ -+ /* Restore original suffix */ -+ tname[namelen] = BASHFUNC_SUFFIX[0]; - } - #if defined (ARRAY_VARS) - # if ARRAY_EXPORT -@@ -2954,7 +2973,7 @@ assign_in_env (word, flags) - var->context = variable_context; /* XXX */ - - INVALIDATE_EXPORTSTR (var); -- var->exportstr = mk_env_string (name, value); -+ var->exportstr = mk_env_string (name, value, 0); - - array_needs_making = 1; - -@@ -3852,21 +3871,42 @@ merge_temporary_env () - /* **************************************************************** */ - - static inline char * --mk_env_string (name, value) -+mk_env_string (name, value, isfunc) - const char *name, *value; -+ int isfunc; - { -- int name_len, value_len; -- char *p; -+ size_t name_len, value_len; -+ char *p, *q; - - name_len = strlen (name); - value_len = STRLEN (value); -- p = (char *)xmalloc (2 + name_len + value_len); -- strcpy (p, name); -- p[name_len] = '='; -+ -+ /* If we are exporting a shell function, construct the encoded function -+ name. */ -+ if (isfunc && value) -+ { -+ p = (char *)xmalloc (BASHFUNC_PREFLEN + name_len + BASHFUNC_SUFFLEN + value_len + 2); -+ q = p; -+ memcpy (q, BASHFUNC_PREFIX, BASHFUNC_PREFLEN); -+ q += BASHFUNC_PREFLEN; -+ memcpy (q, name, name_len); -+ q += name_len; -+ memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN); -+ q += BASHFUNC_SUFFLEN; -+ } -+ else -+ { -+ p = (char *)xmalloc (2 + name_len + value_len); -+ memcpy (p, name, name_len); -+ q = p + name_len; -+ } -+ -+ q[0] = '='; - if (value && *value) -- strcpy (p + name_len + 1, value); -+ memcpy (q + 1, value, value_len + 1); - else -- p[name_len + 1] = '\0'; -+ q[1] = '\0'; -+ - return (p); - } - -@@ -3952,7 +3992,7 @@ make_env_array_from_var_list (vars) - /* Gee, I'd like to get away with not using savestring() if we're - using the cached exportstr... */ - list[list_index] = USE_EXPORTSTR ? savestring (value) -- : mk_env_string (var->name, value); -+ : mk_env_string (var->name, value, function_p (var)); - - if (USE_EXPORTSTR == 0) - SAVE_EXPORTSTR (var, list[list_index]); ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 26 -+#define PATCHLEVEL 27 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/128-upstream-bash43-028.patch b/utils/bash/patches/128-upstream-bash43-028.patch deleted file mode 100644 index b4b1b6dcc6..0000000000 --- a/utils/bash/patches/128-upstream-bash43-028.patch +++ /dev/null @@ -1,1526 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-028 - -Bug-Reported-by: Florian Weimer -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -There are two local buffer overflows in parse.y that can cause the shell -to dump core when given many here-documents attached to a single command -or many nested loops. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -168,6 +168,9 @@ static char *read_a_line __P((int)); - - static int reserved_word_acceptable __P((int)); - static int yylex __P((void)); -+ -+static void push_heredoc __P((REDIRECT *)); -+static char *mk_alexpansion __P((char *)); - static int alias_expand_token __P((char *)); - static int time_command_acceptable __P((void)); - static int special_case_tokens __P((char *)); -@@ -265,7 +268,9 @@ int parser_state; - - /* Variables to manage the task of reading here documents, because we need to - defer the reading until after a complete command has been collected. */ --static REDIRECT *redir_stack[10]; -+#define HEREDOC_MAX 16 -+ -+static REDIRECT *redir_stack[HEREDOC_MAX]; - int need_here_doc; - - /* Where shell input comes from. History expansion is performed on each -@@ -307,7 +312,7 @@ static int global_extglob; - or `for WORD' begins. This is a nested command maximum, since the array - index is decremented after a case, select, or for command is parsed. */ - #define MAX_CASE_NEST 128 --static int word_lineno[MAX_CASE_NEST]; -+static int word_lineno[MAX_CASE_NEST+1]; - static int word_top = -1; - - /* If non-zero, it is the token that we want read_token to return -@@ -520,42 +525,42 @@ redirection: '>' WORD - source.dest = 0; - redir.filename = $2; - $$ = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | NUMBER LESS_LESS WORD - { - source.dest = $1; - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | REDIR_WORD LESS_LESS WORD - { - source.filename = $1; - redir.filename = $3; - $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | LESS_LESS_MINUS WORD - { - source.dest = 0; - redir.filename = $2; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | NUMBER LESS_LESS_MINUS WORD - { - source.dest = $1; - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | REDIR_WORD LESS_LESS_MINUS WORD - { - source.filename = $1; - redir.filename = $3; - $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = $$; -+ push_heredoc ($$); - } - | LESS_LESS_LESS WORD - { -@@ -2636,6 +2641,21 @@ yylex () - which allow ESAC to be the next one read. */ - static int esacs_needed_count; - -+static void -+push_heredoc (r) -+ REDIRECT *r; -+{ -+ if (need_here_doc >= HEREDOC_MAX) -+ { -+ last_command_exit_value = EX_BADUSAGE; -+ need_here_doc = 0; -+ report_syntax_error (_("maximum here-document count exceeded")); -+ reset_parser (); -+ exit_shell (last_command_exit_value); -+ } -+ redir_stack[need_here_doc++] = r; -+} -+ - void - gather_here_documents () - { ---- a/y.tab.c -+++ b/y.tab.c -@@ -168,7 +168,7 @@ - - - /* Copy the first part of user declarations. */ --#line 21 "/usr/homes/chet/src/bash/src/parse.y" -+#line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - - #include "config.h" - -@@ -319,6 +319,9 @@ static char *read_a_line __P((int)); - - static int reserved_word_acceptable __P((int)); - static int yylex __P((void)); -+ -+static void push_heredoc __P((REDIRECT *)); -+static char *mk_alexpansion __P((char *)); - static int alias_expand_token __P((char *)); - static int time_command_acceptable __P((void)); - static int special_case_tokens __P((char *)); -@@ -416,7 +419,9 @@ int parser_state; - - /* Variables to manage the task of reading here documents, because we need to - defer the reading until after a complete command has been collected. */ --static REDIRECT *redir_stack[10]; -+#define HEREDOC_MAX 16 -+ -+static REDIRECT *redir_stack[HEREDOC_MAX]; - int need_here_doc; - - /* Where shell input comes from. History expansion is performed on each -@@ -458,7 +463,7 @@ static int global_extglob; - or `for WORD' begins. This is a nested command maximum, since the array - index is decremented after a case, select, or for command is parsed. */ - #define MAX_CASE_NEST 128 --static int word_lineno[MAX_CASE_NEST]; -+static int word_lineno[MAX_CASE_NEST+1]; - static int word_top = -1; - - /* If non-zero, it is the token that we want read_token to return -@@ -492,7 +497,7 @@ static REDIRECTEE redir; - - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - typedef union YYSTYPE --#line 324 "/usr/homes/chet/src/bash/src/parse.y" -+#line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - WORD_DESC *word; /* the word that we read. */ - int number; /* the number that we read. */ -@@ -503,7 +508,7 @@ typedef union YYSTYPE - PATTERN_LIST *pattern; - } - /* Line 193 of yacc.c. */ --#line 507 "y.tab.c" -+#line 512 "y.tab.c" - YYSTYPE; - # define yystype YYSTYPE /* obsolescent; will be withdrawn */ - # define YYSTYPE_IS_DECLARED 1 -@@ -516,7 +521,7 @@ typedef union YYSTYPE - - - /* Line 216 of yacc.c. */ --#line 520 "y.tab.c" -+#line 525 "y.tab.c" - - #ifdef short - # undef short -@@ -886,23 +891,23 @@ static const yytype_int8 yyrhs[] = - /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ - static const yytype_uint16 yyrline[] = - { -- 0, 377, 377, 388, 397, 412, 422, 424, 428, 434, -- 440, 446, 452, 458, 464, 470, 476, 482, 488, 494, -- 500, 506, 512, 518, 525, 532, 539, 546, 553, 560, -- 566, 572, 578, 584, 590, 596, 602, 608, 614, 620, -- 626, 632, 638, 644, 650, 656, 662, 668, 674, 680, -- 686, 692, 700, 702, 704, 708, 712, 723, 725, 729, -- 731, 733, 749, 751, 755, 757, 759, 761, 763, 765, -- 767, 769, 771, 773, 775, 779, 784, 789, 794, 799, -- 804, 809, 814, 821, 826, 831, 836, 843, 848, 853, -- 858, 863, 868, 875, 880, 885, 892, 895, 898, 902, -- 904, 935, 942, 947, 964, 969, 986, 993, 995, 997, -- 1002, 1006, 1010, 1014, 1016, 1018, 1022, 1023, 1027, 1029, -- 1031, 1033, 1037, 1039, 1041, 1043, 1045, 1047, 1051, 1053, -- 1062, 1070, 1071, 1077, 1078, 1085, 1089, 1091, 1093, 1100, -- 1102, 1104, 1108, 1109, 1112, 1114, 1116, 1120, 1121, 1130, -- 1143, 1159, 1174, 1176, 1178, 1185, 1188, 1192, 1194, 1200, -- 1206, 1223, 1243, 1245, 1268, 1272, 1274, 1276 -+ 0, 382, 382, 393, 402, 417, 427, 429, 433, 439, -+ 445, 451, 457, 463, 469, 475, 481, 487, 493, 499, -+ 505, 511, 517, 523, 530, 537, 544, 551, 558, 565, -+ 571, 577, 583, 589, 595, 601, 607, 613, 619, 625, -+ 631, 637, 643, 649, 655, 661, 667, 673, 679, 685, -+ 691, 697, 705, 707, 709, 713, 717, 728, 730, 734, -+ 736, 738, 754, 756, 760, 762, 764, 766, 768, 770, -+ 772, 774, 776, 778, 780, 784, 789, 794, 799, 804, -+ 809, 814, 819, 826, 831, 836, 841, 848, 853, 858, -+ 863, 868, 873, 880, 885, 890, 897, 900, 903, 907, -+ 909, 940, 947, 952, 969, 974, 991, 998, 1000, 1002, -+ 1007, 1011, 1015, 1019, 1021, 1023, 1027, 1028, 1032, 1034, -+ 1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 1056, 1058, -+ 1067, 1075, 1076, 1082, 1083, 1090, 1094, 1096, 1098, 1105, -+ 1107, 1109, 1113, 1114, 1117, 1119, 1121, 1125, 1126, 1135, -+ 1148, 1164, 1179, 1181, 1183, 1190, 1193, 1197, 1199, 1205, -+ 1211, 1228, 1248, 1250, 1273, 1277, 1279, 1281 - }; - #endif - -@@ -2093,7 +2098,7 @@ yyreduce: - switch (yyn) - { - case 2: --#line 378 "/usr/homes/chet/src/bash/src/parse.y" -+#line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Case of regular command. Discard the error - safety net,and return the command just parsed. */ -@@ -2107,7 +2112,7 @@ yyreduce: - break; - - case 3: --#line 389 "/usr/homes/chet/src/bash/src/parse.y" -+#line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Case of regular command, but not a very - interesting one. Return a NULL command. */ -@@ -2119,7 +2124,7 @@ yyreduce: - break; - - case 4: --#line 398 "/usr/homes/chet/src/bash/src/parse.y" -+#line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Error during parsing. Return NULL command. */ - global_command = (COMMAND *)NULL; -@@ -2137,7 +2142,7 @@ yyreduce: - break; - - case 5: --#line 413 "/usr/homes/chet/src/bash/src/parse.y" -+#line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Case of EOF seen by itself. Do ignoreeof or - not. */ -@@ -2148,17 +2153,17 @@ yyreduce: - break; - - case 6: --#line 423 "/usr/homes/chet/src/bash/src/parse.y" -+#line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 7: --#line 425 "/usr/homes/chet/src/bash/src/parse.y" -+#line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); } - break; - - case 8: --#line 429 "/usr/homes/chet/src/bash/src/parse.y" -+#line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2167,7 +2172,7 @@ yyreduce: - break; - - case 9: --#line 435 "/usr/homes/chet/src/bash/src/parse.y" -+#line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2176,7 +2181,7 @@ yyreduce: - break; - - case 10: --#line 441 "/usr/homes/chet/src/bash/src/parse.y" -+#line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2185,7 +2190,7 @@ yyreduce: - break; - - case 11: --#line 447 "/usr/homes/chet/src/bash/src/parse.y" -+#line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2194,7 +2199,7 @@ yyreduce: - break; - - case 12: --#line 453 "/usr/homes/chet/src/bash/src/parse.y" -+#line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2203,7 +2208,7 @@ yyreduce: - break; - - case 13: --#line 459 "/usr/homes/chet/src/bash/src/parse.y" -+#line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2212,7 +2217,7 @@ yyreduce: - break; - - case 14: --#line 465 "/usr/homes/chet/src/bash/src/parse.y" -+#line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2221,7 +2226,7 @@ yyreduce: - break; - - case 15: --#line 471 "/usr/homes/chet/src/bash/src/parse.y" -+#line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2230,7 +2235,7 @@ yyreduce: - break; - - case 16: --#line 477 "/usr/homes/chet/src/bash/src/parse.y" -+#line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2239,7 +2244,7 @@ yyreduce: - break; - - case 17: --#line 483 "/usr/homes/chet/src/bash/src/parse.y" -+#line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2248,7 +2253,7 @@ yyreduce: - break; - - case 18: --#line 489 "/usr/homes/chet/src/bash/src/parse.y" -+#line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2257,7 +2262,7 @@ yyreduce: - break; - - case 19: --#line 495 "/usr/homes/chet/src/bash/src/parse.y" -+#line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2266,7 +2271,7 @@ yyreduce: - break; - - case 20: --#line 501 "/usr/homes/chet/src/bash/src/parse.y" -+#line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2275,7 +2280,7 @@ yyreduce: - break; - - case 21: --#line 507 "/usr/homes/chet/src/bash/src/parse.y" -+#line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2284,7 +2289,7 @@ yyreduce: - break; - - case 22: --#line 513 "/usr/homes/chet/src/bash/src/parse.y" -+#line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2293,67 +2298,67 @@ yyreduce: - break; - - case 23: --#line 519 "/usr/homes/chet/src/bash/src/parse.y" -+#line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); - (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 24: --#line 526 "/usr/homes/chet/src/bash/src/parse.y" -+#line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 25: --#line 533 "/usr/homes/chet/src/bash/src/parse.y" -+#line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 26: --#line 540 "/usr/homes/chet/src/bash/src/parse.y" -+#line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); - (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 27: --#line 547 "/usr/homes/chet/src/bash/src/parse.y" -+#line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 28: --#line 554 "/usr/homes/chet/src/bash/src/parse.y" -+#line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); - (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN); -- redir_stack[need_here_doc++] = (yyval.redirect); -+ push_heredoc ((yyval.redirect)); - } - break; - - case 29: --#line 561 "/usr/homes/chet/src/bash/src/parse.y" -+#line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2362,7 +2367,7 @@ yyreduce: - break; - - case 30: --#line 567 "/usr/homes/chet/src/bash/src/parse.y" -+#line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2371,7 +2376,7 @@ yyreduce: - break; - - case 31: --#line 573 "/usr/homes/chet/src/bash/src/parse.y" -+#line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2380,7 +2385,7 @@ yyreduce: - break; - - case 32: --#line 579 "/usr/homes/chet/src/bash/src/parse.y" -+#line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2389,7 +2394,7 @@ yyreduce: - break; - - case 33: --#line 585 "/usr/homes/chet/src/bash/src/parse.y" -+#line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2398,7 +2403,7 @@ yyreduce: - break; - - case 34: --#line 591 "/usr/homes/chet/src/bash/src/parse.y" -+#line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2407,7 +2412,7 @@ yyreduce: - break; - - case 35: --#line 597 "/usr/homes/chet/src/bash/src/parse.y" -+#line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2416,7 +2421,7 @@ yyreduce: - break; - - case 36: --#line 603 "/usr/homes/chet/src/bash/src/parse.y" -+#line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2425,7 +2430,7 @@ yyreduce: - break; - - case 37: --#line 609 "/usr/homes/chet/src/bash/src/parse.y" -+#line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2434,7 +2439,7 @@ yyreduce: - break; - - case 38: --#line 615 "/usr/homes/chet/src/bash/src/parse.y" -+#line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2443,7 +2448,7 @@ yyreduce: - break; - - case 39: --#line 621 "/usr/homes/chet/src/bash/src/parse.y" -+#line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2452,7 +2457,7 @@ yyreduce: - break; - - case 40: --#line 627 "/usr/homes/chet/src/bash/src/parse.y" -+#line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2461,7 +2466,7 @@ yyreduce: - break; - - case 41: --#line 633 "/usr/homes/chet/src/bash/src/parse.y" -+#line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2470,7 +2475,7 @@ yyreduce: - break; - - case 42: --#line 639 "/usr/homes/chet/src/bash/src/parse.y" -+#line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2479,7 +2484,7 @@ yyreduce: - break; - - case 43: --#line 645 "/usr/homes/chet/src/bash/src/parse.y" -+#line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2488,7 +2493,7 @@ yyreduce: - break; - - case 44: --#line 651 "/usr/homes/chet/src/bash/src/parse.y" -+#line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.dest = 0; -@@ -2497,7 +2502,7 @@ yyreduce: - break; - - case 45: --#line 657 "/usr/homes/chet/src/bash/src/parse.y" -+#line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2506,7 +2511,7 @@ yyreduce: - break; - - case 46: --#line 663 "/usr/homes/chet/src/bash/src/parse.y" -+#line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2515,7 +2520,7 @@ yyreduce: - break; - - case 47: --#line 669 "/usr/homes/chet/src/bash/src/parse.y" -+#line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 0; - redir.dest = 0; -@@ -2524,7 +2529,7 @@ yyreduce: - break; - - case 48: --#line 675 "/usr/homes/chet/src/bash/src/parse.y" -+#line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2533,7 +2538,7 @@ yyreduce: - break; - - case 49: --#line 681 "/usr/homes/chet/src/bash/src/parse.y" -+#line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2542,7 +2547,7 @@ yyreduce: - break; - - case 50: --#line 687 "/usr/homes/chet/src/bash/src/parse.y" -+#line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2551,7 +2556,7 @@ yyreduce: - break; - - case 51: --#line 693 "/usr/homes/chet/src/bash/src/parse.y" -+#line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2560,29 +2565,29 @@ yyreduce: - break; - - case 52: --#line 701 "/usr/homes/chet/src/bash/src/parse.y" -+#line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 53: --#line 703 "/usr/homes/chet/src/bash/src/parse.y" -+#line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 54: --#line 705 "/usr/homes/chet/src/bash/src/parse.y" -+#line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; } - break; - - case 55: --#line 709 "/usr/homes/chet/src/bash/src/parse.y" -+#line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.redirect) = (yyvsp[(1) - (1)].redirect); - } - break; - - case 56: --#line 713 "/usr/homes/chet/src/bash/src/parse.y" -+#line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - register REDIRECT *t; - -@@ -2594,27 +2599,27 @@ yyreduce: - break; - - case 57: --#line 724 "/usr/homes/chet/src/bash/src/parse.y" -+#line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); } - break; - - case 58: --#line 726 "/usr/homes/chet/src/bash/src/parse.y" -+#line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); } - break; - - case 59: --#line 730 "/usr/homes/chet/src/bash/src/parse.y" -+#line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); } - break; - - case 60: --#line 732 "/usr/homes/chet/src/bash/src/parse.y" -+#line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 61: --#line 734 "/usr/homes/chet/src/bash/src/parse.y" -+#line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2633,72 +2638,72 @@ yyreduce: - break; - - case 62: --#line 750 "/usr/homes/chet/src/bash/src/parse.y" -+#line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 63: --#line 752 "/usr/homes/chet/src/bash/src/parse.y" -+#line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 64: --#line 756 "/usr/homes/chet/src/bash/src/parse.y" -+#line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 65: --#line 758 "/usr/homes/chet/src/bash/src/parse.y" -+#line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 66: --#line 760 "/usr/homes/chet/src/bash/src/parse.y" -+#line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 67: --#line 762 "/usr/homes/chet/src/bash/src/parse.y" -+#line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 68: --#line 764 "/usr/homes/chet/src/bash/src/parse.y" -+#line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 69: --#line 766 "/usr/homes/chet/src/bash/src/parse.y" -+#line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 70: --#line 768 "/usr/homes/chet/src/bash/src/parse.y" -+#line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 71: --#line 770 "/usr/homes/chet/src/bash/src/parse.y" -+#line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 72: --#line 772 "/usr/homes/chet/src/bash/src/parse.y" -+#line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 73: --#line 774 "/usr/homes/chet/src/bash/src/parse.y" -+#line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 74: --#line 776 "/usr/homes/chet/src/bash/src/parse.y" -+#line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 75: --#line 780 "/usr/homes/chet/src/bash/src/parse.y" -+#line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2706,7 +2711,7 @@ yyreduce: - break; - - case 76: --#line 785 "/usr/homes/chet/src/bash/src/parse.y" -+#line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2714,7 +2719,7 @@ yyreduce: - break; - - case 77: --#line 790 "/usr/homes/chet/src/bash/src/parse.y" -+#line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2722,7 +2727,7 @@ yyreduce: - break; - - case 78: --#line 795 "/usr/homes/chet/src/bash/src/parse.y" -+#line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2730,7 +2735,7 @@ yyreduce: - break; - - case 79: --#line 800 "/usr/homes/chet/src/bash/src/parse.y" -+#line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2738,7 +2743,7 @@ yyreduce: - break; - - case 80: --#line 805 "/usr/homes/chet/src/bash/src/parse.y" -+#line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2746,7 +2751,7 @@ yyreduce: - break; - - case 81: --#line 810 "/usr/homes/chet/src/bash/src/parse.y" -+#line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2754,7 +2759,7 @@ yyreduce: - break; - - case 82: --#line 815 "/usr/homes/chet/src/bash/src/parse.y" -+#line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2762,7 +2767,7 @@ yyreduce: - break; - - case 83: --#line 822 "/usr/homes/chet/src/bash/src/parse.y" -+#line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2770,7 +2775,7 @@ yyreduce: - break; - - case 84: --#line 827 "/usr/homes/chet/src/bash/src/parse.y" -+#line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2778,7 +2783,7 @@ yyreduce: - break; - - case 85: --#line 832 "/usr/homes/chet/src/bash/src/parse.y" -+#line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2786,7 +2791,7 @@ yyreduce: - break; - - case 86: --#line 837 "/usr/homes/chet/src/bash/src/parse.y" -+#line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2794,7 +2799,7 @@ yyreduce: - break; - - case 87: --#line 844 "/usr/homes/chet/src/bash/src/parse.y" -+#line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2802,7 +2807,7 @@ yyreduce: - break; - - case 88: --#line 849 "/usr/homes/chet/src/bash/src/parse.y" -+#line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2810,7 +2815,7 @@ yyreduce: - break; - - case 89: --#line 854 "/usr/homes/chet/src/bash/src/parse.y" -+#line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2818,7 +2823,7 @@ yyreduce: - break; - - case 90: --#line 859 "/usr/homes/chet/src/bash/src/parse.y" -+#line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2826,7 +2831,7 @@ yyreduce: - break; - - case 91: --#line 864 "/usr/homes/chet/src/bash/src/parse.y" -+#line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2834,7 +2839,7 @@ yyreduce: - break; - - case 92: --#line 869 "/usr/homes/chet/src/bash/src/parse.y" -+#line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2842,7 +2847,7 @@ yyreduce: - break; - - case 93: --#line 876 "/usr/homes/chet/src/bash/src/parse.y" -+#line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2850,7 +2855,7 @@ yyreduce: - break; - - case 94: --#line 881 "/usr/homes/chet/src/bash/src/parse.y" -+#line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2858,7 +2863,7 @@ yyreduce: - break; - - case 95: --#line 886 "/usr/homes/chet/src/bash/src/parse.y" -+#line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2866,27 +2871,27 @@ yyreduce: - break; - - case 96: --#line 893 "/usr/homes/chet/src/bash/src/parse.y" -+#line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); } - break; - - case 97: --#line 896 "/usr/homes/chet/src/bash/src/parse.y" -+#line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); } - break; - - case 98: --#line 899 "/usr/homes/chet/src/bash/src/parse.y" -+#line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); } - break; - - case 99: --#line 903 "/usr/homes/chet/src/bash/src/parse.y" -+#line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 100: --#line 905 "/usr/homes/chet/src/bash/src/parse.y" -+#line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2918,7 +2923,7 @@ yyreduce: - break; - - case 101: --#line 936 "/usr/homes/chet/src/bash/src/parse.y" -+#line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL; -@@ -2926,7 +2931,7 @@ yyreduce: - break; - - case 102: --#line 943 "/usr/homes/chet/src/bash/src/parse.y" -+#line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2934,7 +2939,7 @@ yyreduce: - break; - - case 103: --#line 948 "/usr/homes/chet/src/bash/src/parse.y" -+#line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2954,7 +2959,7 @@ yyreduce: - break; - - case 104: --#line 965 "/usr/homes/chet/src/bash/src/parse.y" -+#line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2962,7 +2967,7 @@ yyreduce: - break; - - case 105: --#line 970 "/usr/homes/chet/src/bash/src/parse.y" -+#line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - COMMAND *tc; - -@@ -2982,7 +2987,7 @@ yyreduce: - break; - - case 106: --#line 987 "/usr/homes/chet/src/bash/src/parse.y" -+#line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command))); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2990,117 +2995,117 @@ yyreduce: - break; - - case 107: --#line 994 "/usr/homes/chet/src/bash/src/parse.y" -+#line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); } - break; - - case 108: --#line 996 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); } - break; - - case 109: --#line 998 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); } - break; - - case 110: --#line 1003 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); } - break; - - case 111: --#line 1007 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); } - break; - - case 112: --#line 1011 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(2) - (3)].command); } - break; - - case 113: --#line 1015 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); } - break; - - case 114: --#line 1017 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); } - break; - - case 115: --#line 1019 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); } - break; - - case 117: --#line 1024 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); } - break; - - case 118: --#line 1028 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); } - break; - - case 119: --#line 1030 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); } - break; - - case 120: --#line 1032 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); } - break; - - case 121: --#line 1034 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); } - break; - - case 122: --#line 1038 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 123: --#line 1040 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 124: --#line 1042 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 125: --#line 1044 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 126: --#line 1046 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 127: --#line 1048 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 128: --#line 1052 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 129: --#line 1054 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); } - break; - - case 130: --#line 1063 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - if (need_here_doc) -@@ -3109,14 +3114,14 @@ yyreduce: - break; - - case 132: --#line 1072 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - } - break; - - case 134: --#line 1079 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&'); -@@ -3126,17 +3131,17 @@ yyreduce: - break; - - case 136: --#line 1090 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 137: --#line 1092 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 138: --#line 1094 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (4)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&'); -@@ -3146,37 +3151,37 @@ yyreduce: - break; - - case 139: --#line 1101 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 140: --#line 1103 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 141: --#line 1105 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 144: --#line 1113 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = '\n'; } - break; - - case 145: --#line 1115 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = ';'; } - break; - - case 146: --#line 1117 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = yacc_EOF; } - break; - - case 149: --#line 1131 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(1) - (1)].command); - if (need_here_doc) -@@ -3192,7 +3197,7 @@ yyreduce: - break; - - case 150: --#line 1144 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (2)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&'); -@@ -3211,7 +3216,7 @@ yyreduce: - break; - - case 151: --#line 1160 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - (yyval.command) = (yyvsp[(1) - (2)].command); - if (need_here_doc) -@@ -3227,17 +3232,17 @@ yyreduce: - break; - - case 152: --#line 1175 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 153: --#line 1177 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 154: --#line 1179 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&'); -@@ -3247,22 +3252,22 @@ yyreduce: - break; - - case 155: --#line 1186 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); } - break; - - case 156: --#line 1189 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 157: --#line 1193 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 158: --#line 1195 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN; /* toggle */ -@@ -3271,7 +3276,7 @@ yyreduce: - break; - - case 159: --#line 1201 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number); -@@ -3280,7 +3285,7 @@ yyreduce: - break; - - case 160: --#line 1207 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - ELEMENT x; - -@@ -3300,7 +3305,7 @@ yyreduce: - break; - - case 161: --#line 1224 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - ELEMENT x; - -@@ -3321,12 +3326,12 @@ yyreduce: - break; - - case 162: --#line 1244 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); } - break; - - case 163: --#line 1246 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { - /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */ - COMMAND *tc; -@@ -3352,28 +3357,28 @@ yyreduce: - break; - - case 164: --#line 1269 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 165: --#line 1273 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE; } - break; - - case 166: --#line 1275 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - - case 167: --#line 1277 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - - - /* Line 1267 of yacc.c. */ --#line 3377 "y.tab.c" -+#line 3382 "y.tab.c" - default: break; - } - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); -@@ -3587,7 +3592,7 @@ yyreturn: - } - - --#line 1279 "/usr/homes/chet/src/bash/src/parse.y" -+#line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" - - - /* Initial size to allocate for tokens, and the -@@ -4948,6 +4953,21 @@ yylex () - which allow ESAC to be the next one read. */ - static int esacs_needed_count; - -+static void -+push_heredoc (r) -+ REDIRECT *r; -+{ -+ if (need_here_doc >= HEREDOC_MAX) -+ { -+ last_command_exit_value = EX_BADUSAGE; -+ need_here_doc = 0; -+ report_syntax_error (_("maximum here-document count exceeded")); -+ reset_parser (); -+ exit_shell (last_command_exit_value); -+ } -+ redir_stack[need_here_doc++] = r; -+} -+ - void - gather_here_documents () - { -@@ -8541,3 +8561,4 @@ set_line_mbstate () - } - } - #endif /* HANDLE_MULTIBYTE */ -+ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 27 -+#define PATCHLEVEL 28 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/129-upstream-bash43-029.patch b/utils/bash/patches/129-upstream-bash43-029.patch deleted file mode 100644 index be82403491..0000000000 --- a/utils/bash/patches/129-upstream-bash43-029.patch +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-029 - -Bug-Reported-by: Michal Zalewski -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -When bash is parsing a function definition that contains a here-document -delimited by end-of-file (or end-of-string), it leaves the closing delimiter -uninitialized. This can result in an invalid memory access when the parsed -function is later copied. - -Patch (apply with `patch -p0'): - ---- a/make_cmd.c -+++ b/make_cmd.c -@@ -692,6 +692,7 @@ make_redirection (source, instruction, d - /* First do the common cases. */ - temp->redirector = source; - temp->redirectee = dest_and_filename; -+ temp->here_doc_eof = 0; - temp->instruction = instruction; - temp->flags = 0; - temp->rflags = flags; ---- a/copy_cmd.c -+++ b/copy_cmd.c -@@ -126,7 +126,7 @@ copy_redirect (redirect) - { - case r_reading_until: - case r_deblank_reading_until: -- new_redirect->here_doc_eof = savestring (redirect->here_doc_eof); -+ new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0; - /*FALLTHROUGH*/ - case r_reading_string: - case r_appending_to: ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 28 -+#define PATCHLEVEL 29 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/130-upstream-bash43-030.patch b/utils/bash/patches/130-upstream-bash43-030.patch deleted file mode 100644 index 0eadc5c077..0000000000 --- a/utils/bash/patches/130-upstream-bash43-030.patch +++ /dev/null @@ -1,1396 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-030 - -Bug-Reported-by: Michal Zalewski -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -A combination of nested command substitutions and function importing from -the environment can cause bash to execute code appearing in the environment -variable value following the function definition. - -Patch (apply with `patch -p0'): - ---- a/builtins/evalstring.c -+++ b/builtins/evalstring.c -@@ -308,12 +308,25 @@ parse_and_execute (string, from_file, fl - { - struct fd_bitmap *bitmap; - -- if ((flags & SEVAL_FUNCDEF) && command->type != cm_function_def) -+ if (flags & SEVAL_FUNCDEF) - { -- internal_warning ("%s: ignoring function definition attempt", from_file); -- should_jump_to_top_level = 0; -- last_result = last_command_exit_value = EX_BADUSAGE; -- break; -+ char *x; -+ -+ /* If the command parses to something other than a straight -+ function definition, or if we have not consumed the entire -+ string, or if the parser has transformed the function -+ name (as parsing will if it begins or ends with shell -+ whitespace, for example), reject the attempt */ -+ if (command->type != cm_function_def || -+ ((x = parser_remaining_input ()) && *x) || -+ (STREQ (from_file, command->value.Function_def->name->word) == 0)) -+ { -+ internal_warning (_("%s: ignoring function definition attempt"), from_file); -+ should_jump_to_top_level = 0; -+ last_result = last_command_exit_value = EX_BADUSAGE; -+ reset_parser (); -+ break; -+ } - } - - bitmap = new_fd_bitmap (FD_BITMAP_SIZE); -@@ -378,7 +391,10 @@ parse_and_execute (string, from_file, fl - discard_unwind_frame ("pe_dispose"); - - if (flags & SEVAL_ONECMD) -- break; -+ { -+ reset_parser (); -+ break; -+ } - } - } - else ---- a/parse.y -+++ b/parse.y -@@ -2538,6 +2538,16 @@ shell_ungetc (c) - eol_ungetc_lookahead = c; - } - -+char * -+parser_remaining_input () -+{ -+ if (shell_input_line == 0) -+ return 0; -+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len) -+ return '\0'; /* XXX */ -+ return (shell_input_line + shell_input_line_index); -+} -+ - #ifdef INCLUDE_UNUSED - /* Back the input pointer up by one, effectively `ungetting' a character. */ - static void -@@ -4027,8 +4037,8 @@ xparse_dolparen (base, string, indp, fla - reset_parser (); - /* reset_parser clears shell_input_line and associated variables */ - restore_input_line_state (&ls); -- if (interactive) -- token_to_read = 0; -+ -+ token_to_read = 0; - - /* Need to find how many characters parse_and_execute consumed, update - *indp, if flags != 0, copy the portion of the string parsed into RET ---- a/shell.h -+++ b/shell.h -@@ -180,6 +180,8 @@ typedef struct _sh_input_line_state_t { - } sh_input_line_state_t; - - /* Let's try declaring these here. */ -+extern char *parser_remaining_input __P((void)); -+ - extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *)); - extern void restore_parser_state __P((sh_parser_state_t *)); - ---- a/y.tab.c -+++ b/y.tab.c -@@ -168,7 +168,7 @@ - - - /* Copy the first part of user declarations. */ --#line 21 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 21 "/usr/src/local/bash/bash-4.3-patched/parse.y" - - #include "config.h" - -@@ -497,7 +497,7 @@ static REDIRECTEE redir; - - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - typedef union YYSTYPE --#line 329 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 329 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - WORD_DESC *word; /* the word that we read. */ - int number; /* the number that we read. */ -@@ -2098,7 +2098,7 @@ yyreduce: - switch (yyn) - { - case 2: --#line 383 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 383 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Case of regular command. Discard the error - safety net,and return the command just parsed. */ -@@ -2112,7 +2112,7 @@ yyreduce: - break; - - case 3: --#line 394 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 394 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Case of regular command, but not a very - interesting one. Return a NULL command. */ -@@ -2124,7 +2124,7 @@ yyreduce: - break; - - case 4: --#line 403 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 403 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Error during parsing. Return NULL command. */ - global_command = (COMMAND *)NULL; -@@ -2142,7 +2142,7 @@ yyreduce: - break; - - case 5: --#line 418 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 418 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Case of EOF seen by itself. Do ignoreeof or - not. */ -@@ -2153,17 +2153,17 @@ yyreduce: - break; - - case 6: --#line 428 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 428 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 7: --#line 430 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 430 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(2) - (2)].word), (yyvsp[(1) - (2)].word_list)); } - break; - - case 8: --#line 434 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 434 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2172,7 +2172,7 @@ yyreduce: - break; - - case 9: --#line 440 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 440 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2181,7 +2181,7 @@ yyreduce: - break; - - case 10: --#line 446 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 446 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2190,7 +2190,7 @@ yyreduce: - break; - - case 11: --#line 452 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 452 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2199,7 +2199,7 @@ yyreduce: - break; - - case 12: --#line 458 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 458 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2208,7 +2208,7 @@ yyreduce: - break; - - case 13: --#line 464 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 464 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2217,7 +2217,7 @@ yyreduce: - break; - - case 14: --#line 470 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 470 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2226,7 +2226,7 @@ yyreduce: - break; - - case 15: --#line 476 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 476 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2235,7 +2235,7 @@ yyreduce: - break; - - case 16: --#line 482 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 482 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2244,7 +2244,7 @@ yyreduce: - break; - - case 17: --#line 488 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 488 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2253,7 +2253,7 @@ yyreduce: - break; - - case 18: --#line 494 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 494 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2262,7 +2262,7 @@ yyreduce: - break; - - case 19: --#line 500 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 500 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2271,7 +2271,7 @@ yyreduce: - break; - - case 20: --#line 506 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 506 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2280,7 +2280,7 @@ yyreduce: - break; - - case 21: --#line 512 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 512 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2289,7 +2289,7 @@ yyreduce: - break; - - case 22: --#line 518 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 518 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2298,7 +2298,7 @@ yyreduce: - break; - - case 23: --#line 524 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 524 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2308,7 +2308,7 @@ yyreduce: - break; - - case 24: --#line 531 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 531 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2318,7 +2318,7 @@ yyreduce: - break; - - case 25: --#line 538 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 538 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2328,7 +2328,7 @@ yyreduce: - break; - - case 26: --#line 545 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 545 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2338,7 +2338,7 @@ yyreduce: - break; - - case 27: --#line 552 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 552 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2348,7 +2348,7 @@ yyreduce: - break; - - case 28: --#line 559 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 559 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2358,7 +2358,7 @@ yyreduce: - break; - - case 29: --#line 566 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 566 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2367,7 +2367,7 @@ yyreduce: - break; - - case 30: --#line 572 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 572 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2376,7 +2376,7 @@ yyreduce: - break; - - case 31: --#line 578 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 578 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2385,7 +2385,7 @@ yyreduce: - break; - - case 32: --#line 584 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 584 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2394,7 +2394,7 @@ yyreduce: - break; - - case 33: --#line 590 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 590 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2403,7 +2403,7 @@ yyreduce: - break; - - case 34: --#line 596 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 596 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2412,7 +2412,7 @@ yyreduce: - break; - - case 35: --#line 602 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 602 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.dest = (yyvsp[(2) - (2)].number); -@@ -2421,7 +2421,7 @@ yyreduce: - break; - - case 36: --#line 608 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 608 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2430,7 +2430,7 @@ yyreduce: - break; - - case 37: --#line 614 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 614 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = (yyvsp[(3) - (3)].number); -@@ -2439,7 +2439,7 @@ yyreduce: - break; - - case 38: --#line 620 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 620 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2448,7 +2448,7 @@ yyreduce: - break; - - case 39: --#line 626 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 626 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2457,7 +2457,7 @@ yyreduce: - break; - - case 40: --#line 632 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 632 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2466,7 +2466,7 @@ yyreduce: - break; - - case 41: --#line 638 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 638 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2475,7 +2475,7 @@ yyreduce: - break; - - case 42: --#line 644 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 644 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2484,7 +2484,7 @@ yyreduce: - break; - - case 43: --#line 650 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 650 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.filename = (yyvsp[(3) - (3)].word); -@@ -2493,7 +2493,7 @@ yyreduce: - break; - - case 44: --#line 656 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 656 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.dest = 0; -@@ -2502,7 +2502,7 @@ yyreduce: - break; - - case 45: --#line 662 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 662 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2511,7 +2511,7 @@ yyreduce: - break; - - case 46: --#line 668 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 668 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2520,7 +2520,7 @@ yyreduce: - break; - - case 47: --#line 674 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 674 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 0; - redir.dest = 0; -@@ -2529,7 +2529,7 @@ yyreduce: - break; - - case 48: --#line 680 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 680 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = (yyvsp[(1) - (3)].number); - redir.dest = 0; -@@ -2538,7 +2538,7 @@ yyreduce: - break; - - case 49: --#line 686 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 686 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.filename = (yyvsp[(1) - (3)].word); - redir.dest = 0; -@@ -2547,7 +2547,7 @@ yyreduce: - break; - - case 50: --#line 692 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 692 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2556,7 +2556,7 @@ yyreduce: - break; - - case 51: --#line 698 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 698 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - source.dest = 1; - redir.filename = (yyvsp[(2) - (2)].word); -@@ -2565,29 +2565,29 @@ yyreduce: - break; - - case 52: --#line 706 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 706 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 53: --#line 708 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 708 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.element).word = (yyvsp[(1) - (1)].word); (yyval.element).redirect = 0; } - break; - - case 54: --#line 710 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 710 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.element).redirect = (yyvsp[(1) - (1)].redirect); (yyval.element).word = 0; } - break; - - case 55: --#line 714 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 714 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.redirect) = (yyvsp[(1) - (1)].redirect); - } - break; - - case 56: --#line 718 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 718 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - register REDIRECT *t; - -@@ -2599,27 +2599,27 @@ yyreduce: - break; - - case 57: --#line 729 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 729 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(1) - (1)].element), (COMMAND *)NULL); } - break; - - case 58: --#line 731 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 731 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_simple_command ((yyvsp[(2) - (2)].element), (yyvsp[(1) - (2)].command)); } - break; - - case 59: --#line 735 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 735 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = clean_simple_command ((yyvsp[(1) - (1)].command)); } - break; - - case 60: --#line 737 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 737 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 61: --#line 739 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 739 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2638,72 +2638,72 @@ yyreduce: - break; - - case 62: --#line 755 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 755 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 63: --#line 757 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 757 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 64: --#line 761 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 761 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 65: --#line 763 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 763 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 66: --#line 765 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 765 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_while_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 67: --#line 767 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 767 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_until_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command)); } - break; - - case 68: --#line 769 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 769 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 69: --#line 771 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 771 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 70: --#line 773 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 773 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 71: --#line 775 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 775 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 72: --#line 777 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 777 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 73: --#line 779 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 779 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 74: --#line 781 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 781 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 75: --#line 785 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 785 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2711,7 +2711,7 @@ yyreduce: - break; - - case 76: --#line 790 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 790 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2719,7 +2719,7 @@ yyreduce: - break; - - case 77: --#line 795 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 795 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2727,7 +2727,7 @@ yyreduce: - break; - - case 78: --#line 800 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 800 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2735,7 +2735,7 @@ yyreduce: - break; - - case 79: --#line 805 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 805 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2743,7 +2743,7 @@ yyreduce: - break; - - case 80: --#line 810 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 810 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2751,7 +2751,7 @@ yyreduce: - break; - - case 81: --#line 815 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 815 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2759,7 +2759,7 @@ yyreduce: - break; - - case 82: --#line 820 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 820 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_for_command ((yyvsp[(2) - (9)].word), (WORD_LIST *)NULL, (yyvsp[(8) - (9)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2767,7 +2767,7 @@ yyreduce: - break; - - case 83: --#line 827 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 827 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2775,7 +2775,7 @@ yyreduce: - break; - - case 84: --#line 832 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 832 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (7)].word_list), (yyvsp[(6) - (7)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2783,7 +2783,7 @@ yyreduce: - break; - - case 85: --#line 837 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 837 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2791,7 +2791,7 @@ yyreduce: - break; - - case 86: --#line 842 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 842 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_arith_for_command ((yyvsp[(2) - (5)].word_list), (yyvsp[(4) - (5)].command), arith_for_lineno); - if (word_top > 0) word_top--; -@@ -2799,7 +2799,7 @@ yyreduce: - break; - - case 87: --#line 849 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 849 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2807,7 +2807,7 @@ yyreduce: - break; - - case 88: --#line 854 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 854 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (6)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(5) - (6)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2815,7 +2815,7 @@ yyreduce: - break; - - case 89: --#line 859 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 859 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2823,7 +2823,7 @@ yyreduce: - break; - - case 90: --#line 864 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 864 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_select_command ((yyvsp[(2) - (7)].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[(6) - (7)].command), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2831,7 +2831,7 @@ yyreduce: - break; - - case 91: --#line 869 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 869 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2839,7 +2839,7 @@ yyreduce: - break; - - case 92: --#line 874 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 874 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (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]); - if (word_top > 0) word_top--; -@@ -2847,7 +2847,7 @@ yyreduce: - break; - - case 93: --#line 881 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 881 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (PATTERN_LIST *)NULL, word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2855,7 +2855,7 @@ yyreduce: - break; - - case 94: --#line 886 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 886 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (7)].word), (yyvsp[(5) - (7)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2863,7 +2863,7 @@ yyreduce: - break; - - case 95: --#line 891 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 891 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_case_command ((yyvsp[(2) - (6)].word), (yyvsp[(5) - (6)].pattern), word_lineno[word_top]); - if (word_top > 0) word_top--; -@@ -2871,27 +2871,27 @@ yyreduce: - break; - - case 96: --#line 898 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 898 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(1) - (5)].word), (yyvsp[(5) - (5)].command), function_dstart, function_bstart); } - break; - - case 97: --#line 901 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 901 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (6)].word), (yyvsp[(6) - (6)].command), function_dstart, function_bstart); } - break; - - case 98: --#line 904 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 904 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_function_def ((yyvsp[(2) - (4)].word), (yyvsp[(4) - (4)].command), function_dstart, function_bstart); } - break; - - case 99: --#line 908 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 908 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 100: --#line 910 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 910 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2923,7 +2923,7 @@ yyreduce: - break; - - case 101: --#line 941 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 941 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_subshell_command ((yyvsp[(2) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL; -@@ -2931,7 +2931,7 @@ yyreduce: - break; - - case 102: --#line 948 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 948 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", (yyvsp[(2) - (2)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2939,7 +2939,7 @@ yyreduce: - break; - - case 103: --#line 953 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 953 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2959,7 +2959,7 @@ yyreduce: - break; - - case 104: --#line 970 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 970 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_coproc_command ((yyvsp[(2) - (3)].word)->word, (yyvsp[(3) - (3)].command)); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2967,7 +2967,7 @@ yyreduce: - break; - - case 105: --#line 975 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 975 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - COMMAND *tc; - -@@ -2987,7 +2987,7 @@ yyreduce: - break; - - case 106: --#line 992 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 992 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[(2) - (2)].command))); - (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL; -@@ -2995,117 +2995,117 @@ yyreduce: - break; - - case 107: --#line 999 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 999 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (COMMAND *)NULL); } - break; - - case 108: --#line 1001 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1001 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (7)].command), (yyvsp[(4) - (7)].command), (yyvsp[(6) - (7)].command)); } - break; - - case 109: --#line 1003 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1003 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(5) - (6)].command)); } - break; - - case 110: --#line 1008 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1008 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_group_command ((yyvsp[(2) - (3)].command)); } - break; - - case 111: --#line 1012 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1012 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_arith_command ((yyvsp[(1) - (1)].word_list)); } - break; - - case 112: --#line 1016 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1016 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(2) - (3)].command); } - break; - - case 113: --#line 1020 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1020 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (4)].command), (yyvsp[(4) - (4)].command), (COMMAND *)NULL); } - break; - - case 114: --#line 1022 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1022 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (6)].command), (yyvsp[(4) - (6)].command), (yyvsp[(6) - (6)].command)); } - break; - - case 115: --#line 1024 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1024 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = make_if_command ((yyvsp[(2) - (5)].command), (yyvsp[(4) - (5)].command), (yyvsp[(5) - (5)].command)); } - break; - - case 117: --#line 1029 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1029 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (2)].pattern)->next = (yyvsp[(1) - (2)].pattern); (yyval.pattern) = (yyvsp[(2) - (2)].pattern); } - break; - - case 118: --#line 1033 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1033 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (yyvsp[(4) - (4)].command)); } - break; - - case 119: --#line 1035 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1035 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(2) - (4)].word_list), (COMMAND *)NULL); } - break; - - case 120: --#line 1037 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1037 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (yyvsp[(5) - (5)].command)); } - break; - - case 121: --#line 1039 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1039 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = make_pattern_list ((yyvsp[(3) - (5)].word_list), (COMMAND *)NULL); } - break; - - case 122: --#line 1043 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1043 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 123: --#line 1045 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1045 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 124: --#line 1047 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1047 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 125: --#line 1049 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1049 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 126: --#line 1051 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1051 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(1) - (2)].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[(1) - (2)].pattern); } - break; - - case 127: --#line 1053 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1053 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyvsp[(2) - (3)].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[(2) - (3)].pattern)->next = (yyvsp[(1) - (3)].pattern); (yyval.pattern) = (yyvsp[(2) - (3)].pattern); } - break; - - case 128: --#line 1057 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1057 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(1) - (1)].word), (WORD_LIST *)NULL); } - break; - - case 129: --#line 1059 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1059 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.word_list) = make_word_list ((yyvsp[(3) - (3)].word), (yyvsp[(1) - (3)].word_list)); } - break; - - case 130: --#line 1068 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1068 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - if (need_here_doc) -@@ -3114,14 +3114,14 @@ yyreduce: - break; - - case 132: --#line 1077 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1077 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(2) - (2)].command); - } - break; - - case 134: --#line 1084 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1084 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (COMMAND *)NULL, '&'); -@@ -3131,17 +3131,17 @@ yyreduce: - break; - - case 136: --#line 1095 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1095 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 137: --#line 1097 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1097 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 138: --#line 1099 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1099 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (4)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '&'); -@@ -3151,37 +3151,37 @@ yyreduce: - break; - - case 139: --#line 1106 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1106 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 140: --#line 1108 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1108 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), ';'); } - break; - - case 141: --#line 1110 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1110 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 144: --#line 1118 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1118 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = '\n'; } - break; - - case 145: --#line 1120 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1120 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = ';'; } - break; - - case 146: --#line 1122 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1122 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = yacc_EOF; } - break; - - case 149: --#line 1136 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1136 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(1) - (1)].command); - if (need_here_doc) -@@ -3197,7 +3197,7 @@ yyreduce: - break; - - case 150: --#line 1149 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1149 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (2)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (2)].command), (COMMAND *)NULL, '&'); -@@ -3216,7 +3216,7 @@ yyreduce: - break; - - case 151: --#line 1165 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1165 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - (yyval.command) = (yyvsp[(1) - (2)].command); - if (need_here_doc) -@@ -3232,17 +3232,17 @@ yyreduce: - break; - - case 152: --#line 1180 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1180 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), AND_AND); } - break; - - case 153: --#line 1182 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1182 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), OR_OR); } - break; - - case 154: --#line 1184 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1184 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(1) - (3)].command)->type == cm_connection) - (yyval.command) = connect_async_list ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), '&'); -@@ -3252,22 +3252,22 @@ yyreduce: - break; - - case 155: --#line 1191 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1191 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (3)].command), (yyvsp[(3) - (3)].command), ';'); } - break; - - case 156: --#line 1194 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1194 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 157: --#line 1198 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1198 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 158: --#line 1200 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1200 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags ^= CMD_INVERT_RETURN; /* toggle */ -@@ -3276,7 +3276,7 @@ yyreduce: - break; - - case 159: --#line 1206 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1206 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - if ((yyvsp[(2) - (2)].command)) - (yyvsp[(2) - (2)].command)->flags |= (yyvsp[(1) - (2)].number); -@@ -3285,7 +3285,7 @@ yyreduce: - break; - - case 160: --#line 1212 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1212 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - ELEMENT x; - -@@ -3305,7 +3305,7 @@ yyreduce: - break; - - case 161: --#line 1229 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1229 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - ELEMENT x; - -@@ -3326,12 +3326,12 @@ yyreduce: - break; - - case 162: --#line 1249 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1249 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = command_connect ((yyvsp[(1) - (4)].command), (yyvsp[(4) - (4)].command), '|'); } - break; - - case 163: --#line 1251 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1251 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { - /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */ - COMMAND *tc; -@@ -3357,22 +3357,22 @@ yyreduce: - break; - - case 164: --#line 1274 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1274 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.command) = (yyvsp[(1) - (1)].command); } - break; - - case 165: --#line 1278 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1278 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE; } - break; - - case 166: --#line 1280 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1280 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - - case 167: --#line 1282 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1282 "/usr/src/local/bash/bash-4.3-patched/parse.y" - { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; } - break; - -@@ -3592,7 +3592,7 @@ yyreturn: - } - - --#line 1284 "/usr/src/local/chet/src/bash/bash-4.3.28/parse.y" -+#line 1284 "/usr/src/local/bash/bash-4.3-patched/parse.y" - - - /* Initial size to allocate for tokens, and the -@@ -4850,6 +4850,16 @@ shell_ungetc (c) - eol_ungetc_lookahead = c; - } - -+char * -+parser_remaining_input () -+{ -+ if (shell_input_line == 0) -+ return 0; -+ if (shell_input_line_index < 0 || shell_input_line_index >= shell_input_line_len) -+ return '\0'; /* XXX */ -+ return (shell_input_line + shell_input_line_index); -+} -+ - #ifdef INCLUDE_UNUSED - /* Back the input pointer up by one, effectively `ungetting' a character. */ - static void -@@ -6339,8 +6349,8 @@ xparse_dolparen (base, string, indp, fla - reset_parser (); - /* reset_parser clears shell_input_line and associated variables */ - restore_input_line_state (&ls); -- if (interactive) -- token_to_read = 0; -+ -+ token_to_read = 0; - - /* Need to find how many characters parse_and_execute consumed, update - *indp, if flags != 0, copy the portion of the string parsed into RET ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 29 -+#define PATCHLEVEL 30 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/131-upstream-bash43-031.patch b/utils/bash/patches/131-upstream-bash43-031.patch deleted file mode 100644 index a22cb07165..0000000000 --- a/utils/bash/patches/131-upstream-bash43-031.patch +++ /dev/null @@ -1,96 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-031 - -Bug-Reported-by: lolilolicon -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00139.html - -Bug-Description: - -The new nameref assignment functionality introduced in bash-4.3 did not perform -enough validation on the variable value and would create variables with -invalid names. - -Patch (apply with `patch -p0'): - ---- a/subst.h -+++ b/subst.h -@@ -47,6 +47,7 @@ - #define ASS_MKASSOC 0x0004 - #define ASS_MKGLOBAL 0x0008 /* force global assignment */ - #define ASS_NAMEREF 0x0010 /* assigning to nameref variable */ -+#define ASS_FROMREF 0x0020 /* assigning from value of nameref variable */ - - /* Flags for the string extraction functions. */ - #define SX_NOALLOC 0x0001 /* just skip; don't return substring */ ---- a/variables.c -+++ b/variables.c -@@ -2516,10 +2516,27 @@ bind_variable_internal (name, value, tab - HASH_TABLE *table; - int hflags, aflags; - { -- char *newval; -+ char *newname, *newval; - SHELL_VAR *entry; -+#if defined (ARRAY_VARS) -+ arrayind_t ind; -+ char *subp; -+ int sublen; -+#endif - -+ newname = 0; -+#if defined (ARRAY_VARS) -+ if ((aflags & ASS_FROMREF) && (hflags & HASH_NOSRCH) == 0 && valid_array_reference (name)) -+ { -+ newname = array_variable_name (name, &subp, &sublen); -+ if (newname == 0) -+ return (SHELL_VAR *)NULL; /* XXX */ -+ entry = hash_lookup (newname, table); -+ } -+ else -+#endif - entry = (hflags & HASH_NOSRCH) ? (SHELL_VAR *)NULL : hash_lookup (name, table); -+ - /* Follow the nameref chain here if this is the global variables table */ - if (entry && nameref_p (entry) && (invisible_p (entry) == 0) && table == global_variables->table) - { -@@ -2550,6 +2567,16 @@ bind_variable_internal (name, value, tab - var_setvalue (entry, make_variable_value (entry, value, 0)); - } - } -+#if defined (ARRAY_VARS) -+ else if (entry == 0 && newname) -+ { -+ entry = make_new_array_variable (newname); /* indexed array by default */ -+ if (entry == 0) -+ return entry; -+ ind = array_expand_index (name, subp, sublen); -+ bind_array_element (entry, ind, value, aflags); -+ } -+#endif - else if (entry == 0) - { - entry = make_new_variable (name, table); -@@ -2670,7 +2697,8 @@ bind_variable (name, value, flags) - normal. */ - if (nameref_cell (nv) == 0) - return (bind_variable_internal (nv->name, value, nvc->table, 0, flags)); -- return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags)); -+ /* XXX - bug here with ref=array[index] */ -+ return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags|ASS_FROMREF)); - } - else - v = nv; ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 30 -+#define PATCHLEVEL 31 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/132-upstream-bash43-032.patch b/utils/bash/patches/132-upstream-bash43-032.patch deleted file mode 100644 index 96a86c9872..0000000000 --- a/utils/bash/patches/132-upstream-bash43-032.patch +++ /dev/null @@ -1,42 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-032 - -Bug-Reported-by: crispusfairbairn@gmail.com -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html - -Bug-Description: - -When bash is running in Posix mode, it allows signals -- including SIGCHLD -- -to interrupt the `wait' builtin, as Posix requires. However, the interrupt -causes bash to not run a SIGCHLD trap for all exited children. This patch -fixes the issue and restores the documented behavior in Posix mode. - -Patch (apply with `patch -p0'): - ---- a/jobs.c -+++ b/jobs.c -@@ -3339,7 +3339,9 @@ itrace("waitchld: waitpid returns %d blo - if (posixly_correct && this_shell_builtin && this_shell_builtin == wait_builtin) - { - interrupt_immediately = 0; -- trap_handler (SIGCHLD); /* set pending_traps[SIGCHLD] */ -+ /* This was trap_handler (SIGCHLD) but that can lose traps if -+ children_exited > 1 */ -+ queue_sigchld_trap (children_exited); - wait_signal_received = SIGCHLD; - /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up; - run_pending_traps will call run_sigchld_trap later */ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 31 -+#define PATCHLEVEL 32 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/133-upstream-bash43-033.patch b/utils/bash/patches/133-upstream-bash43-033.patch deleted file mode 100644 index 6210b5ea0d..0000000000 --- a/utils/bash/patches/133-upstream-bash43-033.patch +++ /dev/null @@ -1,201 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-033 - -Bug-Reported-by: mickael9@gmail.com, Jan Rome -Bug-Reference-ID: <20140907224046.382ED3610CC@mickael-laptop.localdomain>, - <540D661D.50908@gmail.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00029.html - http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00030.html - -Bug-Description: - -Bash does not clean up the terminal state in all cases where bash or -readline modifies it and bash is subsequently terminated by a fatal signal. -This happens when the `read' builtin modifies the terminal settings, both -when readline is active and when it is not. It occurs most often when a script -installs a trap that exits on a signal without re-sending the signal to itself. - -Patch (apply with `patch -p0'): - ---- a/shell.c -+++ b/shell.c -@@ -73,6 +73,7 @@ - #endif - - #if defined (READLINE) -+# include - # include "bashline.h" - #endif - -@@ -909,6 +910,14 @@ exit_shell (s) - fflush (stdout); /* XXX */ - fflush (stderr); - -+ /* Clean up the terminal if we are in a state where it's been modified. */ -+#if defined (READLINE) -+ if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function) -+ (*rl_deprep_term_function) (); -+#endif -+ if (read_tty_modified ()) -+ read_tty_cleanup (); -+ - /* Do trap[0] if defined. Allow it to override the exit status - passed to us. */ - if (signal_is_trapped (0)) ---- a/builtins/read.def -+++ b/builtins/read.def -@@ -140,10 +140,12 @@ static void reset_alarm __P((void)); - procenv_t alrmbuf; - int sigalrm_seen; - --static int reading; -+static int reading, tty_modified; - static SigHandler *old_alrm; - static unsigned char delim; - -+static struct ttsave termsave; -+ - /* In all cases, SIGALRM just sets a flag that we check periodically. This - avoids problems with the semi-tricky stuff we do with the xfree of - input_string at the top of the unwind-protect list (see below). */ -@@ -188,7 +190,6 @@ read_builtin (list) - struct stat tsb; - SHELL_VAR *var; - TTYSTRUCT ttattrs, ttset; -- struct ttsave termsave; - #if defined (ARRAY_VARS) - WORD_LIST *alist; - #endif -@@ -221,7 +222,7 @@ read_builtin (list) - USE_VAR(ps2); - USE_VAR(lastsig); - -- sigalrm_seen = reading = 0; -+ sigalrm_seen = reading = tty_modified = 0; - - i = 0; /* Index into the string that we are reading. */ - raw = edit = 0; /* Not reading raw input by default. */ -@@ -438,6 +439,8 @@ read_builtin (list) - retval = 128+SIGALRM; - goto assign_vars; - } -+ if (interactive_shell == 0) -+ initialize_terminating_signals (); - old_alrm = set_signal_handler (SIGALRM, sigalrm); - add_unwind_protect (reset_alarm, (char *)NULL); - #if defined (READLINE) -@@ -482,7 +485,10 @@ read_builtin (list) - i = silent ? ttfd_cbreak (fd, &ttset) : ttfd_onechar (fd, &ttset); - if (i < 0) - sh_ttyerror (1); -+ tty_modified = 1; - add_unwind_protect ((Function *)ttyrestore, (char *)&termsave); -+ if (interactive_shell == 0) -+ initialize_terminating_signals (); - } - } - else if (silent) /* turn off echo but leave term in canonical mode */ -@@ -497,7 +503,10 @@ read_builtin (list) - if (i < 0) - sh_ttyerror (1); - -+ tty_modified = 1; - add_unwind_protect ((Function *)ttyrestore, (char *)&termsave); -+ if (interactive_shell == 0) -+ initialize_terminating_signals (); - } - - /* This *must* be the top unwind-protect on the stack, so the manipulation -@@ -588,6 +597,8 @@ read_builtin (list) - } - else - lastsig = 0; -+ if (terminating_signal && tty_modified) -+ ttyrestore (&termsave); /* fix terminal before exiting */ - CHECK_TERMSIG; - eof = 1; - break; -@@ -978,6 +989,20 @@ ttyrestore (ttp) - struct ttsave *ttp; - { - ttsetattr (ttp->fd, ttp->attrs); -+ tty_modified = 0; -+} -+ -+void -+read_tty_cleanup () -+{ -+ if (tty_modified) -+ ttyrestore (&termsave); -+} -+ -+int -+read_tty_modified () -+{ -+ return (tty_modified); - } - - #if defined (READLINE) ---- a/builtins/common.h -+++ b/builtins/common.h -@@ -122,6 +122,10 @@ extern void bash_logout __P((void)); - /* Functions from getopts.def */ - extern void getopts_reset __P((int)); - -+/* Functions from read.def */ -+extern void read_tty_cleanup __P((void)); -+extern int read_tty_modified __P((void)); -+ - /* Functions from set.def */ - extern int minus_o_option_value __P((char *)); - extern void list_minus_o_opts __P((int, int)); ---- a/bashline.c -+++ b/bashline.c -@@ -202,6 +202,7 @@ extern int current_command_line_count, s - extern int last_command_exit_value; - extern int array_needs_making; - extern int posixly_correct, no_symbolic_links; -+extern int sigalrm_seen; - extern char *current_prompt_string, *ps1_prompt; - extern STRING_INT_ALIST word_token_alist[]; - extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin; -@@ -4208,8 +4209,9 @@ bash_event_hook () - { - /* If we're going to longjmp to top_level, make sure we clean up readline. - check_signals will call QUIT, which will eventually longjmp to top_level, -- calling run_interrupt_trap along the way. */ -- if (interrupt_state) -+ calling run_interrupt_trap along the way. The check for sigalrm_seen is -+ to clean up the read builtin's state. */ -+ if (terminating_signal || interrupt_state || sigalrm_seen) - rl_cleanup_after_signal (); - bashline_reset_event_hook (); - check_signals_and_traps (); /* XXX */ ---- a/sig.c -+++ b/sig.c -@@ -532,8 +532,10 @@ termsig_sighandler (sig) - #if defined (READLINE) - /* Set the event hook so readline will call it after the signal handlers - finish executing, so if this interrupted character input we can get -- quick response. */ -- if (interactive_shell && interactive && no_line_editing == 0) -+ quick response. If readline is active or has modified the terminal we -+ need to set this no matter what the signal is, though the check for -+ RL_STATE_TERMPREPPED is possibly redundant. */ -+ if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED)) - bashline_set_event_hook (); - #endif - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 32 -+#define PATCHLEVEL 33 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/134-upstream-bash43-034.patch b/utils/bash/patches/134-upstream-bash43-034.patch deleted file mode 100644 index d3c4f8f1d4..0000000000 --- a/utils/bash/patches/134-upstream-bash43-034.patch +++ /dev/null @@ -1,74 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-034 - -Bug-Reported-by: Dreamcat4 -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-05/msg00001.html - -Bug-Description: - -If neither the -f nor -v options is supplied to unset, and a name argument is -found to be a function and unset, subsequent name arguments are not treated as -variables before attempting to unset a function by that name. - -Patch (apply with `patch -p0'): - ---- a/builtins/set.def -+++ b/builtins/set.def -@@ -751,9 +751,11 @@ unset_builtin (list) - WORD_LIST *list; - { - int unset_function, unset_variable, unset_array, opt, nameref, any_failed; -+ int global_unset_func, global_unset_var; - char *name; - - unset_function = unset_variable = unset_array = nameref = any_failed = 0; -+ global_unset_func = global_unset_var = 0; - - reset_internal_getopt (); - while ((opt = internal_getopt (list, "fnv")) != -1) -@@ -761,10 +763,10 @@ unset_builtin (list) - switch (opt) - { - case 'f': -- unset_function = 1; -+ global_unset_func = 1; - break; - case 'v': -- unset_variable = 1; -+ global_unset_var = 1; - break; - case 'n': - nameref = 1; -@@ -777,7 +779,7 @@ unset_builtin (list) - - list = loptend; - -- if (unset_function && unset_variable) -+ if (global_unset_func && global_unset_var) - { - builtin_error (_("cannot simultaneously unset a function and a variable")); - return (EXECUTION_FAILURE); -@@ -795,6 +797,9 @@ unset_builtin (list) - - name = list->word->word; - -+ unset_function = global_unset_func; -+ unset_variable = global_unset_var; -+ - #if defined (ARRAY_VARS) - unset_array = 0; - if (!unset_function && valid_array_reference (name)) ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 33 -+#define PATCHLEVEL 34 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/135-upstream-bash43-035.patch b/utils/bash/patches/135-upstream-bash43-035.patch deleted file mode 100644 index 4e614ce112..0000000000 --- a/utils/bash/patches/135-upstream-bash43-035.patch +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-035 - -Bug-Reported-by: -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-08/msg00045.html - -Bug-Description: - -A locale with a long name can trigger a buffer overflow and core dump. This -applies on systems that do not have locale_charset in libc, are not using -GNU libiconv, and are not using the libintl that ships with bash in lib/intl. - -Patch (apply with `patch -p0'): - ---- a/lib/sh/unicode.c -+++ b/lib/sh/unicode.c -@@ -78,13 +78,15 @@ stub_charset () - s = strrchr (locale, '.'); - if (s) - { -- strcpy (charsetbuf, s+1); -+ strncpy (charsetbuf, s+1, sizeof (charsetbuf) - 1); -+ charsetbuf[sizeof (charsetbuf) - 1] = '\0'; - t = strchr (charsetbuf, '@'); - if (t) - *t = 0; - return charsetbuf; - } -- strcpy (charsetbuf, locale); -+ strncpy (charsetbuf, locale, sizeof (charsetbuf) - 1); -+ charsetbuf[sizeof (charsetbuf) - 1] = '\0'; - return charsetbuf; - } - #endif ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 34 -+#define PATCHLEVEL 35 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/136-upstream-bash43-036.patch b/utils/bash/patches/136-upstream-bash43-036.patch deleted file mode 100644 index 198b662c36..0000000000 --- a/utils/bash/patches/136-upstream-bash43-036.patch +++ /dev/null @@ -1,48 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-036 - -Bug-Reported-by: emanuelczirai@cryptolab.net -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00071.html - -Bug-Description: - -When evaluating and setting integer variables, and the assignment fails to -create a variable (for example, when performing an operation on an array -variable with an invalid subscript), bash attempts to dereference a null -pointer, causing a segmentation violation. - -Patch (apply with `patch -p0'): - ---- a/variables.c -+++ b/variables.c -@@ -2833,10 +2833,12 @@ bind_int_variable (lhs, rhs) - #endif - v = bind_variable (lhs, rhs, 0); - -- if (v && isint) -- VSETATTR (v, att_integer); -- -- VUNSETATTR (v, att_invisible); -+ if (v) -+ { -+ if (isint) -+ VSETATTR (v, att_integer); -+ VUNSETATTR (v, att_invisible); -+ } - - return (v); - } ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 35 -+#define PATCHLEVEL 36 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/137-upstream-bash43-037.patch b/utils/bash/patches/137-upstream-bash43-037.patch deleted file mode 100644 index 946e9fe14e..0000000000 --- a/utils/bash/patches/137-upstream-bash43-037.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-037 - -Bug-Reported-by: Greg Wooledge -Bug-Reference-ID: <20150204144240.GN13956@eeg.ccf.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00007.html - -Bug-Description: - -If an associative array uses `@' or `*' as a subscript, `declare -p' produces -output that cannot be reused as input. - -Patch (apply with `patch -p0'): - ---- a/assoc.c -+++ b/assoc.c -@@ -436,6 +436,8 @@ assoc_to_assign (hash, quoted) - #if 1 - if (sh_contains_shell_metas (tlist->key)) - istr = sh_double_quote (tlist->key); -+ else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0') -+ istr = sh_double_quote (tlist->key); - else - istr = tlist->key; - #else ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 36 -+#define PATCHLEVEL 37 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/138-upstream-bash43-038.patch b/utils/bash/patches/138-upstream-bash43-038.patch deleted file mode 100644 index 9857847596..0000000000 --- a/utils/bash/patches/138-upstream-bash43-038.patch +++ /dev/null @@ -1,67 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-038 - -Bug-Reported-by: worley@alum.mit.edu (Dale R. Worley) -Bug-Reference-ID: <201406100051.s5A0pCeB014978@hobgoblin.ariadne.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-06/msg00028.html - -Bug-Description: - -There are a number of instances where `time' is not recognized as a reserved -word when the shell grammar says it should be. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -2818,11 +2818,16 @@ time_command_acceptable () - case AND_AND: - case OR_OR: - case '&': -+ case WHILE: - case DO: -+ case UNTIL: -+ case IF: - case THEN: -+ case ELIF: - case ELSE: - case '{': /* } */ -- case '(': /* ) */ -+ case '(': /* )( */ -+ case ')': /* only valid in case statement */ - case BANG: /* ! time pipeline */ - case TIME: /* time time pipeline */ - case TIMEOPT: /* time -p time pipeline */ ---- a/y.tab.c -+++ b/y.tab.c -@@ -5130,11 +5130,16 @@ time_command_acceptable () - case AND_AND: - case OR_OR: - case '&': -+ case WHILE: - case DO: -+ case UNTIL: -+ case IF: - case THEN: -+ case ELIF: - case ELSE: - case '{': /* } */ -- case '(': /* ) */ -+ case '(': /* )( */ -+ case ')': /* only valid in case statement */ - case BANG: /* ! time pipeline */ - case TIME: /* time time pipeline */ - case TIMEOPT: /* time -p time pipeline */ ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 37 -+#define PATCHLEVEL 38 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/139-upstream-bash43-039.patch b/utils/bash/patches/139-upstream-bash43-039.patch deleted file mode 100644 index f8ad363f3e..0000000000 --- a/utils/bash/patches/139-upstream-bash43-039.patch +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-039 - -Bug-Reported-by: SN -Bug-Reference-ID: <54E2554C.205@gazeta.pl> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00060.html - -Bug-Description: - -Using the output of `declare -p' when run in a function can result in variables -that are invisible to `declare -p'. This problem occurs when an assignment -builtin such as `declare' receives a quoted compound array assignment as one of -its arguments. - -Patch (apply with `patch -p0'): - ---- a/arrayfunc.c -+++ b/arrayfunc.c -@@ -404,6 +404,9 @@ assign_array_var_from_word_list (var, li - (*var->assign_func) (var, l->word->word, i, 0); - else - array_insert (a, i, l->word->word); -+ -+ VUNSETATTR (var, att_invisible); /* no longer invisible */ -+ - return var; - } - -@@ -634,6 +637,10 @@ assign_array_var_from_string (var, value - - if (nlist) - dispose_words (nlist); -+ -+ if (var) -+ VUNSETATTR (var, att_invisible); /* no longer invisible */ -+ - return (var); - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 38 -+#define PATCHLEVEL 39 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/140-upstream-bash43-040.patch b/utils/bash/patches/140-upstream-bash43-040.patch deleted file mode 100644 index a329d37f39..0000000000 --- a/utils/bash/patches/140-upstream-bash43-040.patch +++ /dev/null @@ -1,38 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-040 - -Bug-Reported-by: Jean Delvare -Bug-Reference-ID: <20150609180231.5f463695@endymion.delvare> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00033.html - -Bug-Description: - -There is a memory leak that occurs when bash expands an array reference on -the rhs of an assignment statement. - -Patch (apply with `patch -p0'): - ---- a/subst.c -+++ b/subst.c -@@ -5782,7 +5782,7 @@ expand_arrayref: - /* XXX - does this leak if name[@] or name[*]? */ - if (pflags & PF_ASSIGNRHS) - { -- temp = array_variable_name (name, &tt, (int *)0); -+ var = array_variable_part (name, &tt, (int *)0); - if (ALL_ELEMENT_SUB (tt[0]) && tt[1] == ']') - temp = array_value (name, quoted|Q_DOUBLE_QUOTES, 0, &atype, &ind); - else ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 39 -+#define PATCHLEVEL 40 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/141-upstream-bash43-041.patch b/utils/bash/patches/141-upstream-bash43-041.patch deleted file mode 100644 index 75fdace428..0000000000 --- a/utils/bash/patches/141-upstream-bash43-041.patch +++ /dev/null @@ -1,67 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-041 - -Bug-Reported-by: Hanno Böck -Bug-Reference-ID: <20150623131106.6f111da9@pc1>, <20150707004640.0e61d2f9@pc1> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00089.html, - http://lists.gnu.org/archive/html/bug-bash/2015-07/msg00018.html - -Bug-Description: - -There are several out-of-bounds read errors that occur when completing command -lines where assignment statements appear before the command name. The first -two appear only when programmable completion is enabled; the last one only -happens when listing possible completions. - -Patch (apply with `patch -p0'): - ---- a/bashline.c -+++ b/bashline.c -@@ -1468,10 +1468,23 @@ attempt_shell_completion (text, start, e - - os = start; - n = 0; -+ was_assignment = 0; - s = find_cmd_start (os); - e = find_cmd_end (end); - do - { -+ /* Don't read past the end of rl_line_buffer */ -+ if (s > rl_end) -+ { -+ s1 = s = e1; -+ break; -+ } -+ /* Or past point if point is within an assignment statement */ -+ else if (was_assignment && s > rl_point) -+ { -+ s1 = s = e1; -+ break; -+ } - /* Skip over assignment statements preceding a command name. If we - don't find a command name at all, we can perform command name - completion. If we find a partial command name, we should perform ---- a/lib/readline/complete.c -+++ b/lib/readline/complete.c -@@ -689,6 +689,8 @@ printable_part (pathname) - - if (temp == 0 || *temp == '\0') - return (pathname); -+ else if (temp[1] == 0 && temp == pathname) -+ return (pathname); - /* If the basename is NULL, we might have a pathname like '/usr/src/'. - Look for a previous slash and, if one is found, return the portion - following that slash. If there's no previous slash, just return the ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 40 -+#define PATCHLEVEL 41 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/utils/bash/patches/142-upstream-bash43-042.patch b/utils/bash/patches/142-upstream-bash43-042.patch deleted file mode 100644 index bf1546be95..0000000000 --- a/utils/bash/patches/142-upstream-bash43-042.patch +++ /dev/null @@ -1,50 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.3 -Patch-ID: bash43-042 - -Bug-Reported-by: Nathan Neulinger -Bug-Reference-ID: <558EFDF2.7060402@neulinger.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2015-06/msg00096.html - -Bug-Description: - -There is a problem when parsing command substitutions containing `case' -commands within pipelines that causes the parser to not correctly identify -the end of the command substitution. - -Patch (apply with `patch -p0'): - ---- a/parse.y -+++ b/parse.y -@@ -3708,6 +3708,8 @@ eof_error: - /*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/ - tflags |= LEX_INWORD; - lex_wlen = 0; -+ if (tflags & LEX_RESWDOK) -+ lex_rwlen = 0; - } - } - ---- a/y.tab.c -+++ b/y.tab.c -@@ -6020,6 +6020,8 @@ eof_error: - /*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/ - tflags |= LEX_INWORD; - lex_wlen = 0; -+ if (tflags & LEX_RESWDOK) -+ lex_rwlen = 0; - } - } - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -25,6 +25,6 @@ - regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh - looks for to find the patch level (for the sccs version string). */ - --#define PATCHLEVEL 41 -+#define PATCHLEVEL 42 - - #endif /* _PATCHLEVEL_H_ */