From f9f6cbd8c6f47727ea875007c18a9cf5ce46ec40 Mon Sep 17 00:00:00 2001 From: Adolf Belka Date: Thu, 8 Apr 2021 13:10:00 +0200 Subject: [PATCH] bash: Update to 5.1 with patch 4 - Update from 5.0 with patch 18 to 5.1 wih patch 4 - Remove old bash50 patches - Update rootfiles - Add new bash51 patches - Installed updated version in a vm testbed system All bash commands that were run, executed correctly Script created to redirect output to a file and ran correctly - Changelog 1. New Features in bash-5.1 since release of bash-5.0 a. `bind -x' now supports different bindings for different editing modes and keymaps. b. Bash attempts to optimize the number of times it forks when executing commands in subshells and from `bash -c'. c. Here documents and here strings now use pipes for the expanded document if it's smaller than the pipe buffer size, reverting to temporary files if it's larger. d. There are new loadable builtins: mktemp, accept, mkfifo, csv, cut/lcut e. In posix mode, `trap -p' now displays signals whose disposition is SIG_DFL and those that were SIG_IGN when the shell starts. f. The shell now expands the history number (e.g., in PS1) even if it is not currently saving commands to the history list. g. `read -e' may now be used with arbitrary file descriptors (`read -u N'). h. The `select' builtin now runs traps if its internal call to the read builtin is interrupted by a signal. i. SRANDOM: a new variable that expands to a 32-bit random number that is not produced by an LCRNG, and uses getrandom/getentropy, falling back to /dev/urandom or arc4random if available. There is a fallback generator if none of these are available. j. shell-transpose-words: a new bindable readline command that uses the same definition of word as shell-forward-word, etc. k. The shell now adds default bindings for shell-forward-word, shell-backward-word, shell-transpose-words, and shell-kill-word. l. Bash now allows ARGV0 appearing in the initial shell environment to set $0. m. If `unset' is executed without option arguments, bash tries to unset a shell function if a name argument cannot be a shell variable name because it's not an identifier. n. The `test -N' operator uses nanosecond timestamp granularity if it's available. o. Bash posix mode now treats assignment statements preceding shell function definitions the same as in its default mode, since POSIX has changed and no longer requires those assignments to persist after the function returns (POSIX interp 654). p. BASH_REMATCH is no longer readonly. q. wait: has a new -p VARNAME option, which stores the PID returned by `wait -n' or `wait' without arguments. r. Sorting the results of pathname expansion now uses byte-by-byte comparisons if two strings collate equally to impose a total order; the result of a POSIX interpretation. s. Bash now allows SIGINT trap handlers to execute recursively. t. Bash now saves and restores state around setting and unsetting posix mode, instead of having unsetting posix mode set a known state. u. Process substitution is now available in posix mode. v. READLINE_MARK: a new variable available while executing commands bound with `bind -x', contains the value of the mark. w. Bash removes SIGCHLD from the set of blocked signals if it's blocked at shell startup. x. `test -v N' can now test whether or not positional parameter N is set. y. `local' now honors the `-p' option to display all local variables at the current context. z. The `@a' variable transformation now prints attributes for unset array variables. aa. The `@A' variable transformation now prints a declare command that sets a variable's attributes if the variable has attributes but is unset. bb. `declare' and `local' now have a -I option that inherits attributes and value from a variable with the same name at a previous scope. cc. When run from a -c command, `jobs' now reports the status of completed jobs. dd. New `U', `u', and `L' parameter transformations to convert to uppercase, convert first character to uppercase, and convert to lowercase, respectively. ee. PROMPT_COMMAND: can now be an array variable, each element of which can contain a command to be executed like a string PROMPT_COMMAND variable. ff. `ulimit' has a -R option to report and set the RLIMIT_RTTIME resource. gg. Associative arrays may be assigned using a list of key-value pairs within a compound assignment. Compound assignments where the words are not of the form [key]=value are assumed to be key-value assignments. A missing or empty key is an error; a missing value is treated as NULL. Assignments may not mix the two forms. hh. New `K' parameter transformation to display associative arrays as key- value pairs. ii. Writing history to syslog now handles messages longer than the syslog max length by writing multiple messages with a sequence number. jj. SECONDS and RANDOM may now be assigned using arithmetic expressions, since they are nominally integer variables. LINENO is not an integer variable. kk. Bash temporarily suppresses the verbose option when running the DEBUG trap while running a command from the `fc' builtin. ll. `wait -n' now accepts a list of job specifications as arguments and will wait for the first one in the list to change state. mm. The associative array implementation can now dynamically increase the size of the hash table based on insertion patterns. nn. HISTFILE is now readonly in a restricted shell. oo. The bash malloc now returns memory that is 16-byte aligned on 64-bit systems. pp. If the hash builtin is listing hashed filenames portably, don't print anything if the table is empty. qq. GLOBIGNORE now ignores `.' and `..' as a terminal pathname component. rr. Bash attempts to optimize away forks in the last command in a function body under appropriate circumstances. ss. The globbing code now uses fnmatch(3) to check collation elements (if available) even in cases without multibyte characters. tt. The `fg' and `bg' builtins now return an error in a command substitution when asked to restart a job inherited from the parent shell. uu. The shell now attempts to unlink all FIFOs on exit, whether a consuming process has finished with them or not. vv. There is a new contributed loadable builtin: asort. Signed-off-by: Adolf Belka Signed-off-by: Michael Tremer --- config/rootfiles/common/bash | 11 +- lfs/bash | 8 +- src/patches/bash/bash50-001 | 166 -------------------- src/patches/bash/bash50-002 | 113 -------------- src/patches/bash/bash50-003 | 239 ----------------------------- src/patches/bash/bash50-004 | 53 ------- src/patches/bash/bash50-005 | 110 ------------- src/patches/bash/bash50-006 | 47 ------ src/patches/bash/bash50-007 | 62 -------- src/patches/bash/bash50-008 | 68 --------- src/patches/bash/bash50-009 | 42 ----- src/patches/bash/bash50-010 | 172 --------------------- src/patches/bash/bash50-011 | 59 ------- src/patches/bash/bash50-012 | 64 -------- src/patches/bash/bash50-013 | 73 --------- src/patches/bash/bash50-014 | 52 ------- src/patches/bash/bash50-015 | 78 ---------- src/patches/bash/bash50-016 | 58 ------- src/patches/bash/bash50-017 | 289 ----------------------------------- src/patches/bash/bash50-018 | 45 ------ src/patches/bash/bash51-001 | 80 ++++++++++ src/patches/bash/bash51-002 | 57 +++++++ src/patches/bash/bash51-003 | 53 +++++++ src/patches/bash/bash51-004 | 126 +++++++++++++++ 24 files changed, 327 insertions(+), 1798 deletions(-) delete mode 100644 src/patches/bash/bash50-001 delete mode 100644 src/patches/bash/bash50-002 delete mode 100644 src/patches/bash/bash50-003 delete mode 100644 src/patches/bash/bash50-004 delete mode 100644 src/patches/bash/bash50-005 delete mode 100644 src/patches/bash/bash50-006 delete mode 100644 src/patches/bash/bash50-007 delete mode 100644 src/patches/bash/bash50-008 delete mode 100644 src/patches/bash/bash50-009 delete mode 100644 src/patches/bash/bash50-010 delete mode 100644 src/patches/bash/bash50-011 delete mode 100644 src/patches/bash/bash50-012 delete mode 100644 src/patches/bash/bash50-013 delete mode 100644 src/patches/bash/bash50-014 delete mode 100644 src/patches/bash/bash50-015 delete mode 100644 src/patches/bash/bash50-016 delete mode 100644 src/patches/bash/bash50-017 delete mode 100644 src/patches/bash/bash50-018 create mode 100644 src/patches/bash/bash51-001 create mode 100644 src/patches/bash/bash51-002 create mode 100644 src/patches/bash/bash51-003 create mode 100644 src/patches/bash/bash51-004 diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash index 7669333c8d..c28d3571ab 100644 --- a/config/rootfiles/common/bash +++ b/config/rootfiles/common/bash @@ -62,7 +62,10 @@ #usr/include/bash/y.tab.h #usr/lib/bash usr/lib/bash/Makefile.inc +usr/lib/bash/accept usr/lib/bash/basename +usr/lib/bash/csv +usr/lib/bash/cut usr/lib/bash/dirname usr/lib/bash/fdflags usr/lib/bash/finfo @@ -72,12 +75,15 @@ usr/lib/bash/ln usr/lib/bash/loadables.h usr/lib/bash/logname usr/lib/bash/mkdir +usr/lib/bash/mkfifo +usr/lib/bash/mktemp usr/lib/bash/mypid usr/lib/bash/pathchk usr/lib/bash/print usr/lib/bash/printenv usr/lib/bash/push usr/lib/bash/realpath +usr/lib/bash/rm usr/lib/bash/rmdir usr/lib/bash/seq usr/lib/bash/setpgid @@ -110,11 +116,7 @@ usr/lib/bash/whoami #usr/share/locale/da/LC_MESSAGES/bash.mo #usr/share/locale/de/LC_MESSAGES/bash.mo #usr/share/locale/el/LC_MESSAGES/bash.mo -#usr/share/locale/en@boldquot -#usr/share/locale/en@boldquot/LC_MESSAGES #usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo -#usr/share/locale/en@quot -#usr/share/locale/en@quot/LC_MESSAGES #usr/share/locale/en@quot/LC_MESSAGES/bash.mo #usr/share/locale/eo/LC_MESSAGES/bash.mo #usr/share/locale/es/LC_MESSAGES/bash.mo @@ -128,6 +130,7 @@ usr/lib/bash/whoami #usr/share/locale/id/LC_MESSAGES/bash.mo #usr/share/locale/it/LC_MESSAGES/bash.mo #usr/share/locale/ja/LC_MESSAGES/bash.mo +#usr/share/locale/ko/LC_MESSAGES/bash.mo #usr/share/locale/lt/LC_MESSAGES/bash.mo #usr/share/locale/nb/LC_MESSAGES/bash.mo #usr/share/locale/nl/LC_MESSAGES/bash.mo diff --git a/lfs/bash b/lfs/bash index 9bac360c24..214894ad27 100644 --- a/lfs/bash +++ b/lfs/bash @@ -24,7 +24,7 @@ include Config -VER = 5.0 +VER = 5.1 THISAPP = bash-$(VER) DL_FILE = $(THISAPP).tar.gz @@ -53,7 +53,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 2b44b47b905be16f45709648f671820b +$(DL_FILE)_MD5 = bb91a17fd6c9032c26d0b2b78b50aff5 install : $(TARGET) @@ -87,8 +87,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) sed -e "s/filename, RTLD_LAZY/filename, RTLD_NOW/" \ -i $(DIR_APP)/builtins/enable.def - for i in $$(seq 1 18); do \ - cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash50-$$(printf "%03d" "$${i}") || exit 1; \ + for i in $$(seq 1 4); do \ + cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash51-$$(printf "%03d" "$${i}") || exit 1; \ done cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash-4.0-paths-1.patch diff --git a/src/patches/bash/bash50-001 b/src/patches/bash/bash50-001 deleted file mode 100644 index 169317dedd..0000000000 --- a/src/patches/bash/bash50-001 +++ /dev/null @@ -1,166 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-001 - -Bug-Reported-by: axel@freakout.de -Bug-Reference-ID: <201901082050.x08KoShS006731@bongo.freakout.de> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00079.html - -Bug-Description: - -Under certain circumstances, the glob expansion code did not remove -backslashes escaping characters in directory names (or portions of a -pattern preceding a slash). - -Patch (apply with `patch -p0'): - -*** ../bash-5.0/bashline.c 2018-11-27 13:20:16.000000000 -0500 ---- bashline.c 2019-01-16 16:06:03.000000000 -0500 -*************** -*** 232,235 **** ---- 232,236 ---- - static int bash_possible_command_completions __P((int, int)); - -+ static int completion_glob_pattern __P((char *)); - static char *glob_complete_word __P((const char *, int)); - static int bash_glob_completion_internal __P((int)); -*************** -*** 1742,1746 **** - /* This could be a globbing pattern, so try to expand it using pathname - expansion. */ -! if (!matches && glob_pattern_p (text)) - { - matches = rl_completion_matches (text, glob_complete_word); ---- 1743,1747 ---- - /* This could be a globbing pattern, so try to expand it using pathname - expansion. */ -! if (!matches && completion_glob_pattern ((char *)text)) - { - matches = rl_completion_matches (text, glob_complete_word); -*************** -*** 1851,1855 **** - } - -! globpat = glob_pattern_p (hint_text); - - /* If this is an absolute program name, do not check it against ---- 1852,1856 ---- - } - -! globpat = completion_glob_pattern ((char *)hint_text); - - /* If this is an absolute program name, do not check it against -*************** -*** 3714,3717 **** ---- 3715,3773 ---- - } - -+ static int -+ completion_glob_pattern (string) -+ char *string; -+ { -+ register int c; -+ char *send; -+ int open; -+ -+ DECLARE_MBSTATE; -+ -+ open = 0; -+ send = string + strlen (string); -+ -+ while (c = *string++) -+ { -+ switch (c) -+ { -+ case '?': -+ case '*': -+ return (1); -+ -+ case '[': -+ open++; -+ continue; -+ -+ case ']': -+ if (open) -+ return (1); -+ continue; -+ -+ case '+': -+ case '@': -+ case '!': -+ if (*string == '(') /*)*/ -+ return (1); -+ continue; -+ -+ case '\\': -+ if (*string == 0) -+ return (0); -+ } -+ -+ /* Advance one fewer byte than an entire multibyte character to -+ account for the auto-increment in the loop above. */ -+ #ifdef HANDLE_MULTIBYTE -+ string--; -+ ADVANCE_CHAR_P (string, send - string); -+ string++; -+ #else -+ ADVANCE_CHAR_P (string, send - string); -+ #endif -+ } -+ return (0); -+ } -+ - static char *globtext; - static char *globorig; -*************** -*** 3878,3882 **** - } - -! if (t && glob_pattern_p (t) == 0) - rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ - FREE (t); ---- 3934,3938 ---- - } - -! if (t && completion_glob_pattern (t) == 0) - rl_explicit_arg = 1; /* XXX - force glob_complete_word to append `*' */ - FREE (t); -*** ../bash-5.0/lib/glob/glob_loop.c 2018-12-31 13:35:15.000000000 -0500 ---- lib/glob/glob_loop.c 2019-01-09 09:44:36.000000000 -0500 -*************** -*** 55,59 **** - - case L('\\'): -- #if 0 - /* Don't let the pattern end in a backslash (GMATCH returns no match - if the pattern ends in a backslash anyway), but otherwise return 1, ---- 55,58 ---- -*************** -*** 61,69 **** - and it can be removed. */ - return (*p != L('\0')); -- #else -- /* The pattern may not end with a backslash. */ -- if (*p++ == L('\0')) -- return 0; -- #endif - } - ---- 60,63 ---- -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 0 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-002 b/src/patches/bash/bash50-002 deleted file mode 100644 index 3fc8272f84..0000000000 --- a/src/patches/bash/bash50-002 +++ /dev/null @@ -1,113 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-002 - -Bug-Reported-by: Ante Peric -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00095.html - -Bug-Description: - -When an alias value ends with an unquoted literal tab (not part of a quoted -string or comment), alias expansion cannot correctly detect the end of the -alias value after expanding it. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0/parser.h 2018-12-28 19:11:18.000000000 -0500 ---- parser.h 2019-01-11 15:13:03.000000000 -0500 -*************** -*** 48,51 **** ---- 48,52 ---- - #define PST_REDIRLIST 0x080000 /* parsing a list of redirections preceding a simple command name */ - #define PST_COMMENT 0x100000 /* parsing a shell comment; used by aliases */ -+ #define PST_ENDALIAS 0x200000 /* just finished expanding and consuming an alias */ - - /* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */ -*** ../bash-5.0/parse.y 2019-01-02 13:57:34.000000000 -0500 ---- parse.y 2019-01-14 08:23:31.000000000 -0500 -*************** -*** 2558,2567 **** - pushed_string_list->flags != PSH_DPAREN && - (parser_state & PST_COMMENT) == 0 && - shell_input_line_index > 0 && -! shell_input_line[shell_input_line_index-1] != ' ' && - shell_input_line[shell_input_line_index-1] != '\n' && - shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && - (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) - { - return ' '; /* END_ALIAS */ - } ---- 2558,2569 ---- - pushed_string_list->flags != PSH_DPAREN && - (parser_state & PST_COMMENT) == 0 && -+ (parser_state & PST_ENDALIAS) == 0 && /* only once */ - shell_input_line_index > 0 && -! shellblank (shell_input_line[shell_input_line_index-1]) == 0 && - shell_input_line[shell_input_line_index-1] != '\n' && - shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && - (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) - { -+ parser_state |= PST_ENDALIAS; - return ' '; /* END_ALIAS */ - } -*************** -*** 2572,2575 **** ---- 2574,2578 ---- - if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) - { -+ parser_state &= ~PST_ENDALIAS; - pop_string (); - uc = shell_input_line[shell_input_line_index]; -*** ../bash-5.0/y.tab.c 2019-01-02 13:57:43.000000000 -0500 ---- y.tab.c 2019-01-14 08:39:23.000000000 -0500 -*************** -*** 4874,4883 **** - pushed_string_list->flags != PSH_DPAREN && - (parser_state & PST_COMMENT) == 0 && - shell_input_line_index > 0 && -! shell_input_line[shell_input_line_index-1] != ' ' && - shell_input_line[shell_input_line_index-1] != '\n' && - shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && - (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) - { - return ' '; /* END_ALIAS */ - } ---- 4874,4885 ---- - pushed_string_list->flags != PSH_DPAREN && - (parser_state & PST_COMMENT) == 0 && -+ (parser_state & PST_ENDALIAS) == 0 && /* only once */ - shell_input_line_index > 0 && -! shellblank (shell_input_line[shell_input_line_index-1]) == 0 && - shell_input_line[shell_input_line_index-1] != '\n' && - shellmeta (shell_input_line[shell_input_line_index-1]) == 0 && - (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"')) - { -+ parser_state |= PST_ENDALIAS; - return ' '; /* END_ALIAS */ - } -*************** -*** 4888,4891 **** ---- 4890,4894 ---- - if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE) - { -+ parser_state &= ~PST_ENDALIAS; - pop_string (); - uc = shell_input_line[shell_input_line_index]; -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 1 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-003 b/src/patches/bash/bash50-003 deleted file mode 100644 index f7e5677e54..0000000000 --- a/src/patches/bash/bash50-003 +++ /dev/null @@ -1,239 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-003 - -Bug-Reported-by: Andrew Church -Bug-Reference-ID: <5c534aa2.04371@msgid.achurch.org> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00276.html - -Bug-Description: - -There are several incompatibilities in how bash-5.0 processes pathname -expansion (globbing) of filename arguments that have backslashes in the -directory portion. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/lib/glob/glob_loop.c 2019-01-16 16:13:21.000000000 -0500 ---- lib/glob/glob_loop.c 2019-02-01 09:45:11.000000000 -0500 -*************** -*** 27,34 **** - register const GCHAR *p; - register GCHAR c; -! int bopen; - - p = pattern; -! bopen = 0; - - while ((c = *p++) != L('\0')) ---- 27,34 ---- - register const GCHAR *p; - register GCHAR c; -! int bopen, bsquote; - - p = pattern; -! bopen = bsquote = 0; - - while ((c = *p++) != L('\0')) -*************** -*** 56,66 **** - case L('\\'): - /* Don't let the pattern end in a backslash (GMATCH returns no match -! if the pattern ends in a backslash anyway), but otherwise return 1, -! since the matching engine uses backslash as an escape character -! and it can be removed. */ -! return (*p != L('\0')); - } - -! return 0; - } - ---- 56,75 ---- - case L('\\'): - /* Don't let the pattern end in a backslash (GMATCH returns no match -! if the pattern ends in a backslash anyway), but otherwise note that -! we have seen this, since the matching engine uses backslash as an -! escape character and it can be removed. We return 2 later if we -! have seen only backslash-escaped characters, so interested callers -! know they can shortcut and just dequote the pathname. */ -! if (*p != L('\0')) -! { -! p++; -! bsquote = 1; -! continue; -! } -! else /* (*p == L('\0')) */ -! return 0; - } - -! return bsquote ? 2 : 0; - } - -*** ../bash-5.0-patched/lib/glob/glob.h 2013-10-28 14:46:12.000000000 -0400 ---- lib/glob/glob.h 2019-03-07 11:06:47.000000000 -0500 -*************** -*** 31,34 **** ---- 31,35 ---- - #define GX_ADDCURDIR 0x200 /* internal -- add passed directory name */ - #define GX_GLOBSTAR 0x400 /* turn on special handling of ** */ -+ #define GX_RECURSE 0x800 /* internal -- glob_filename called recursively */ - - extern int glob_pattern_p __P((const char *)); -*** ../bash-5.0-patched/lib/glob/glob.c 2018-09-20 10:53:23.000000000 -0400 ---- lib/glob/glob.c 2019-03-07 14:23:43.000000000 -0500 -*************** -*** 1062,1066 **** - unsigned int directory_len; - int free_dirname; /* flag */ -! int dflags; - - result = (char **) malloc (sizeof (char *)); ---- 1078,1082 ---- - unsigned int directory_len; - int free_dirname; /* flag */ -! int dflags, hasglob; - - result = (char **) malloc (sizeof (char *)); -*************** -*** 1111,1117 **** - } - - /* If directory_name contains globbing characters, then we -! have to expand the previous levels. Just recurse. */ -! if (directory_len > 0 && glob_pattern_p (directory_name)) - { - char **directories, *d, *p; ---- 1127,1136 ---- - } - -+ hasglob = 0; - /* If directory_name contains globbing characters, then we -! have to expand the previous levels. Just recurse. -! If glob_pattern_p returns != [0,1] we have a pattern that has backslash -! quotes but no unquoted glob pattern characters. We dequote it below. */ -! if (directory_len > 0 && (hasglob = glob_pattern_p (directory_name)) == 1) - { - char **directories, *d, *p; -*************** -*** 1176,1180 **** - d[directory_len - 1] = '\0'; - -! directories = glob_filename (d, dflags); - - if (free_dirname) ---- 1195,1199 ---- - d[directory_len - 1] = '\0'; - -! directories = glob_filename (d, dflags|GX_RECURSE); - - if (free_dirname) -*************** -*** 1333,1336 **** ---- 1352,1369 ---- - return (NULL); - } -+ /* If we have a directory name with quoted characters, and we are -+ being called recursively to glob the directory portion of a pathname, -+ we need to dequote the directory name before returning it so the -+ caller can read the directory */ -+ if (directory_len > 0 && hasglob == 2 && (flags & GX_RECURSE) != 0) -+ { -+ dequote_pathname (directory_name); -+ directory_len = strlen (directory_name); -+ } -+ -+ /* We could check whether or not the dequoted directory_name is a -+ directory and return it here, returning the original directory_name -+ if not, but we don't do that yet. I'm not sure it matters. */ -+ - /* Handle GX_MARKDIRS here. */ - result[0] = (char *) malloc (directory_len + 1); -*** ../bash-5.0-patched/pathexp.c 2018-04-29 17:44:48.000000000 -0400 ---- pathexp.c 2019-01-31 20:19:41.000000000 -0500 -*************** -*** 66,74 **** - register int c; - char *send; -! int open; - - DECLARE_MBSTATE; - -! open = 0; - send = string + strlen (string); - ---- 66,74 ---- - register int c; - char *send; -! int open, bsquote; - - DECLARE_MBSTATE; - -! open = bsquote = 0; - send = string + strlen (string); - -*************** -*** 101,105 **** - globbing. */ - case '\\': -! return (*string != 0); - - case CTLESC: ---- 101,112 ---- - globbing. */ - case '\\': -! if (*string != '\0' && *string != '/') -! { -! bsquote = 1; -! string++; -! continue; -! } -! else if (*string == 0) -! return (0); - - case CTLESC: -*************** -*** 118,122 **** - #endif - } -! return (0); - } - ---- 125,130 ---- - #endif - } -! -! return (bsquote ? 2 : 0); - } - -*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500 ---- bashline.c 2019-02-22 09:29:08.000000000 -0500 -*************** -*** 3753,3757 **** - - case '\\': -! if (*string == 0) - return (0); - } ---- 3766,3770 ---- - - case '\\': -! if (*string++ == 0) - return (0); - } -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 2 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-004 b/src/patches/bash/bash50-004 deleted file mode 100644 index fe3c764bd6..0000000000 --- a/src/patches/bash/bash50-004 +++ /dev/null @@ -1,53 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-004 - -Bug-Reported-by: Daniel Kahn Gillmor -Bug-Reference-ID: <87lg0g8aiw.fsf@fifthhorseman.net> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-04/msg00076.html - -Bug-Description: - -In bash-5.0, the `wait' builtin without arguments waits for all children of the -shell. This includes children it `inherited' at shell invocation time. This -patch modifies the behavior to not wait for these inherited children, some -of which might be long-lived. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500 ---- jobs.c 2019-04-12 15:15:10.000000000 -0400 -*************** -*** 2489,2496 **** - wait_procsubs (); - reap_procsubs (); -! #if 1 - /* We don't want to wait indefinitely if we have stopped children. */ -- /* XXX - should add a loop that goes through the list of process -- substitutions and waits for each proc in turn before this code. */ - if (any_stopped == 0) - { ---- 2490,2495 ---- - wait_procsubs (); - reap_procsubs (); -! #if 0 - /* We don't want to wait indefinitely if we have stopped children. */ - if (any_stopped == 0) - { -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 3 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-005 b/src/patches/bash/bash50-005 deleted file mode 100644 index 9b1cd75b0b..0000000000 --- a/src/patches/bash/bash50-005 +++ /dev/null @@ -1,110 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-005 - -Bug-Reported-by: Brad Spencer -Bug-Reference-ID: <1b993ff2-ce4f-662a-6be4-393457362e47@blackberry.com> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00250.html - -Bug-Description: - -In certain cases, bash optimizes out a fork() call too early and prevents -traps from running. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/command.h 2018-07-20 21:16:31.000000000 -0400 ---- command.h 2019-02-20 11:09:36.000000000 -0500 -*************** -*** 187,190 **** ---- 188,192 ---- - #define CMD_LASTPIPE 0x2000 - #define CMD_STDPATH 0x4000 /* use standard path for command lookup */ -+ #define CMD_TRY_OPTIMIZING 0x8000 /* try to optimize this simple command */ - - /* What a command looks like. */ -*** ../bash-5.0-patched/builtins/evalstring.c 2018-12-26 11:19:21.000000000 -0500 ---- builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500 -*************** -*** 101,104 **** ---- 101,113 ---- - } - -+ int -+ can_optimize_connection (command) -+ COMMAND *command; -+ { -+ return (*bash_input.location.string == '\0' && -+ (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && -+ command->value.Connection->second->type == cm_simple); -+ } -+ - void - optimize_fork (command) -*************** -*** 106,110 **** - { - if (command->type == cm_connection && -! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR) && - should_suppress_fork (command->value.Connection->second)) - { ---- 115,120 ---- - { - if (command->type == cm_connection && -! (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && -! (command->value.Connection->second->flags & CMD_TRY_OPTIMIZING) && - should_suppress_fork (command->value.Connection->second)) - { -*************** -*** 413,418 **** - command->value.Simple->flags |= CMD_NO_FORK; - } -! else if (command->type == cm_connection) -! optimize_fork (command); - #endif /* ONESHOT */ - ---- 423,438 ---- - command->value.Simple->flags |= CMD_NO_FORK; - } -! -! /* Can't optimize forks out here execept for simple commands. -! This knows that the parser sets up commands as left-side heavy -! (&& and || are left-associative) and after the single parse, -! if we are at the end of the command string, the last in a -! series of connection commands is -! command->value.Connection->second. */ -! else if (command->type == cm_connection && can_optimize_connection (command)) -! { -! command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING; -! command->value.Connection->second->value.Simple->flags |= CMD_TRY_OPTIMIZING; -! } - #endif /* ONESHOT */ - -*** ../bash-5.0-patched/execute_cmd.c 2018-12-05 09:05:14.000000000 -0500 ---- execute_cmd.c 2019-01-25 15:59:00.000000000 -0500 -*************** -*** 2768,2771 **** ---- 2768,2773 ---- - (exec_result != EXECUTION_SUCCESS))) - { -+ optimize_fork (command); -+ - second = command->value.Connection->second; - if (ignore_return && second) -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 4 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-006 b/src/patches/bash/bash50-006 deleted file mode 100644 index 2ad1cd2009..0000000000 --- a/src/patches/bash/bash50-006 +++ /dev/null @@ -1,47 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-006 - -Bug-Reported-by: Tomas Mozes -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-03/msg00037.html - -Bug-Description: - -Bash-5.0 did not build successfully if SYSLOG_HISTORY was defined without -also defining SYSLOG_SHOPT. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/builtins/shopt.def 2018-10-05 14:49:02.000000000 -0400 ---- builtins/shopt.def 2019-01-23 09:55:22.000000000 -0500 -*************** -*** 123,127 **** - #endif - -! #if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT) - extern int syslog_history; - #endif ---- 123,127 ---- - #endif - -! #if defined (SYSLOG_HISTORY) - extern int syslog_history; - #endif -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 5 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-007 b/src/patches/bash/bash50-007 deleted file mode 100644 index b9eb4150a2..0000000000 --- a/src/patches/bash/bash50-007 +++ /dev/null @@ -1,62 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-007 - -Bug-Reported-by: Grisha Levit -Bug-Reference-ID: -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2019-02/msg00067.html - -Bug-Description: - -Running `exec' when job control was disabled, even temporarily, but after it -had been initialized, could leave the terminal in the wrong process group for -the executed process. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/jobs.c 2018-12-06 11:44:34.000000000 -0500 ---- jobs.c 2019-04-12 15:15:10.000000000 -0400 -*************** -*** 4838,4850 **** - { - if (job_control) -! { -! terminate_stopped_jobs (); - -! if (original_pgrp >= 0) -! give_terminal_to (original_pgrp, 1); -! } - -! if (original_pgrp >= 0) -! setpgid (0, original_pgrp); - } - ---- 4838,4848 ---- - { - if (job_control) -! terminate_stopped_jobs (); - -! if (original_pgrp >= 0 && terminal_pgrp != original_pgrp) -! give_terminal_to (original_pgrp, 1); - -! if (original_pgrp >= 0 && setpgid (0, original_pgrp) == 0) -! shell_pgrp = original_pgrp; - } - -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 6 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-008 b/src/patches/bash/bash50-008 deleted file mode 100644 index b09d6b33ac..0000000000 --- a/src/patches/bash/bash50-008 +++ /dev/null @@ -1,68 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-008 - -Bug-Reported-by: Michael Albinus -Bug-Reference-ID: <87bm36k3kz.fsf@gmx.de> -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00111.html - -Bug-Description: - -When HISTSIZE is set to 0, history expansion can leave the history length -set to an incorrect value, leading to subsequent attempts to access invalid -memory. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/bashhist.c 2018-07-05 22:41:14.000000000 -0400 ---- bashhist.c 2019-02-20 16:20:04.000000000 -0500 -*************** -*** 561,573 **** - if (!history_expansion_inhibited && history_expansion && history_expansion_p (line)) - { - /* If we are expanding the second or later line of a multi-line - command, decrease history_length so references to history expansions - in these lines refer to the previous history entry and not the - current command. */ - if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) - history_length--; - expanded = history_expand (line, &history_value); - if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) -! history_length++; - - if (expanded) ---- 561,576 ---- - if (!history_expansion_inhibited && history_expansion && history_expansion_p (line)) - { -+ int old_len; -+ - /* If we are expanding the second or later line of a multi-line - command, decrease history_length so references to history expansions - in these lines refer to the previous history entry and not the - current command. */ -+ old_len = history_length; - if (history_length > 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) - history_length--; - expanded = history_expand (line, &history_value); - if (history_length >= 0 && command_oriented_history && current_command_first_line_saved && current_command_line_count > 1) -! history_length = old_len; - - if (expanded) - -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 7 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-009 b/src/patches/bash/bash50-009 deleted file mode 100644 index aef4ce7b5a..0000000000 --- a/src/patches/bash/bash50-009 +++ /dev/null @@ -1,42 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-009 - -Bug-Reported-by: chet.ramey@case.edu -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -The history file reading code doesn't close the file descriptor open to -the history file when it encounters a zero-length file. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400 ---- lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400 -*************** -*** 306,309 **** ---- 312,316 ---- - { - free (input); -+ close (file); - return 0; /* don't waste time if we don't have to */ - } -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 8 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-010 b/src/patches/bash/bash50-010 deleted file mode 100644 index bac7aa9251..0000000000 --- a/src/patches/bash/bash50-010 +++ /dev/null @@ -1,172 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-010 - -Bug-Reported-by: Thorsten Glaser -Bug-Reference-ID: <156622962831.19438.16374961114836556294.reportbug@tglase.lan.tarent.de> -Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=935115 - -Bug-Description: - -Bash-5.0 changed the way assignment statements preceding special builtins -and shell functions were handled in posix mode. They automatically created -or modified global variables instead of modifying existing local variables -as in bash-4.4. - -The bash-4.4 posix-mode semantics were buggy, and resulted in creating -local variables where they were not intended and modifying global variables -and local variables simultaneously. - -The bash-5.0 changes were intended to fix this issue, but did not preserve -enough backwards compatibility. The posix standard also changed what it -required in these cases, so bash-5.0 is not bound by the strict conformance -requirements that existed in previous issues of the standard. - -This patch modifies the bash-5.0 posix mode behavior in an effort to restore -some backwards compatibility and rationalize the behavior in the presence of -local variables. It - -1. Changes the assignment semantics to be more similar to standalone assignment - statements: assignments preceding a function call or special builtin while - executing in a shell function will modify the value of a local variable - with the same name for the duration of the function's execution; - -2. Changes assignments preceding shell function calls or special builtins - from within a shell function to no longer create or modify global variables - in the presence of a local variable with the same name; - -3. Assignment statements preceding a shell function call or special builtin - at the global scope continue to modify the (global) calling environment, - but are unaffected by assignments preceding function calls or special - builtins within a function, as described in item 2. This is also similar - to the behavior of a standalone assignment statement. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/variables.c 2018-12-18 11:07:21.000000000 -0500 ---- variables.c 2019-08-22 10:53:44.000000000 -0400 -*************** -*** 4461,4467 **** - - /* Take a variable from an assignment statement preceding a posix special -! builtin (including `return') and create a global variable from it. This -! is called from merge_temporary_env, which is only called when in posix -! mode. */ - static void - push_posix_temp_var (data) ---- 4461,4467 ---- - - /* Take a variable from an assignment statement preceding a posix special -! builtin (including `return') and create a variable from it as if a -! standalone assignment statement had been performed. This is called from -! merge_temporary_env, which is only called when in posix mode. */ - static void - push_posix_temp_var (data) -*************** -*** 4473,4486 **** - var = (SHELL_VAR *)data; - -! binding_table = global_variables->table; -! if (binding_table == 0) -! binding_table = global_variables->table = hash_create (VARIABLES_HASH_BUCKETS); -! -! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, ASS_FORCE|ASS_NOLONGJMP); - - /* global variables are no longer temporary and don't need propagating. */ -! var->attributes &= ~(att_tempvar|att_propagate); - if (v) -! v->attributes |= var->attributes; - - if (find_special_var (var->name) >= 0) ---- 4473,4497 ---- - var = (SHELL_VAR *)data; - -! /* Just like do_assignment_internal(). This makes assignments preceding -! special builtins act like standalone assignment statements when in -! posix mode, satisfying the posix requirement that this affect the -! "current execution environment." */ -! v = bind_variable (var->name, value_cell (var), ASS_FORCE|ASS_NOLONGJMP); -! -! /* If this modifies an existing local variable, v->context will be non-zero. -! If it comes back with v->context == 0, we bound at the global context. -! Set binding_table appropriately. It doesn't matter whether it's correct -! if the variable is local, only that it's not global_variables->table */ -! binding_table = v->context ? shell_variables->table : global_variables->table; - - /* global variables are no longer temporary and don't need propagating. */ -! if (binding_table == global_variables->table) -! var->attributes &= ~(att_tempvar|att_propagate); -! - if (v) -! { -! v->attributes |= var->attributes; -! v->attributes &= ~att_tempvar; /* not a temp var now */ -! } - - if (find_special_var (var->name) >= 0) -*************** -*** 4576,4587 **** - { - int i; - - tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1); - tempvar_list[tvlist_ind = 0] = 0; -! -! hash_flush (temporary_env, pushf); -! hash_dispose (temporary_env); - temporary_env = (HASH_TABLE *)NULL; - - tempvar_list[tvlist_ind] = 0; - ---- 4587,4601 ---- - { - int i; -+ HASH_TABLE *disposer; - - tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1); - tempvar_list[tvlist_ind = 0] = 0; -! -! disposer = temporary_env; - temporary_env = (HASH_TABLE *)NULL; - -+ hash_flush (disposer, pushf); -+ hash_dispose (disposer); -+ - tempvar_list[tvlist_ind] = 0; - -*** ../bash-5.0-patched/tests/varenv.right 2018-12-17 15:39:48.000000000 -0500 ---- tests/varenv.right 2019-08-22 16:05:25.000000000 -0400 -*************** -*** 147,153 **** - outside: declare -- var="one" - inside: declare -x var="value" -! outside: declare -x var="value" -! inside: declare -- var="local" -! outside: declare -x var="global" - foo= environment foo= - foo=foo environment foo=foo ---- 147,153 ---- - outside: declare -- var="one" - inside: declare -x var="value" -! outside: declare -- var="outside" -! inside: declare -x var="global" -! outside: declare -- var="outside" - foo= environment foo= - foo=foo environment foo=foo -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 9 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-011 b/src/patches/bash/bash50-011 deleted file mode 100644 index a9ae690e00..0000000000 --- a/src/patches/bash/bash50-011 +++ /dev/null @@ -1,59 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-011 - -Bug-Reported-by: Matt Whitlock -Bug-Reference-ID: -Bug-Reference-URL: https://savannah.gnu.org/support/?109671 - -Bug-Description: - -The conditional command did not perform appropriate quoted null character -removal on its arguments, causing syntax errors and attempts to stat -invalid pathnames. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/subst.c 2018-12-22 17:43:37.000000000 -0500 ---- subst.c 2019-04-14 13:25:41.000000000 -0400 -*************** -*** 3626,3630 **** - SPECIAL is 2, this is an rhs argument for the =~ operator, and should - be quoted appropriately for regcomp/regexec. The caller is responsible -! for removing the backslashes if the unquoted word is needed later. */ - char * - cond_expand_word (w, special) ---- 3642,3648 ---- - SPECIAL is 2, this is an rhs argument for the =~ operator, and should - be quoted appropriately for regcomp/regexec. The caller is responsible -! for removing the backslashes if the unquoted word is needed later. In -! any case, since we don't perform word splitting, we need to do quoted -! null character removal. */ - char * - cond_expand_word (w, special) -*************** -*** 3647,3650 **** ---- 3665,3670 ---- - if (special == 0) /* LHS */ - { -+ if (l->word) -+ word_list_remove_quoted_nulls (l); - dequote_list (l); - r = string_list (l); -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 10 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-012 b/src/patches/bash/bash50-012 deleted file mode 100644 index 7470e76655..0000000000 --- a/src/patches/bash/bash50-012 +++ /dev/null @@ -1,64 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-012 - -Bug-Reported-by: lessbug@qq.com -Bug-Reference-ID: -Bug-Reference-URL: - -Bug-Description: - -When using previous-history to go back beyond the beginning of the history list, -it's possible to move to an incorrect partial line. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/lib/readline/misc.c 2017-07-07 17:30:12.000000000 -0400 ---- lib/readline/misc.c 2019-05-16 11:43:46.000000000 -0400 -*************** -*** 577,580 **** ---- 590,594 ---- - { - HIST_ENTRY *old_temp, *temp; -+ int had_saved_line; - - if (count < 0) -*************** -*** 589,592 **** ---- 603,607 ---- - - /* If we don't have a line saved, then save this one. */ -+ had_saved_line = _rl_saved_line_for_history != 0; - rl_maybe_save_line (); - -*************** -*** 612,616 **** - if (temp == 0) - { -! rl_maybe_unsave_line (); - rl_ding (); - } ---- 627,632 ---- - if (temp == 0) - { -! if (had_saved_line == 0) -! _rl_free_saved_history_line (); - rl_ding (); - } -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 11 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-013 b/src/patches/bash/bash50-013 deleted file mode 100644 index e44fdb5053..0000000000 --- a/src/patches/bash/bash50-013 +++ /dev/null @@ -1,73 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-013 - -Bug-Reported-by: HIROSE Masaaki -Bug-Reference-ID: -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00038.html - -Bug-Description: - -Reading history entries with timestamps can result in history entries joined -by linefeeds. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/lib/readline/histfile.c 2018-06-11 09:14:52.000000000 -0400 ---- lib/readline/histfile.c 2019-05-16 15:55:57.000000000 -0400 -*************** -*** 370,376 **** - - has_timestamps = HIST_TIMESTAMP_START (buffer); -! history_multiline_entries += has_timestamps && history_write_timestamps; - - /* Skip lines until we are at FROM. */ - for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) - if (*line_end == '\n') ---- 370,378 ---- - - has_timestamps = HIST_TIMESTAMP_START (buffer); -! history_multiline_entries += has_timestamps && history_write_timestamps; - - /* Skip lines until we are at FROM. */ -+ if (has_timestamps) -+ last_ts = buffer; - for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) - if (*line_end == '\n') -*************** -*** 381,385 **** ---- 383,398 ---- - if (HIST_TIMESTAMP_START(p) == 0) - current_line++; -+ else -+ last_ts = p; - line_start = p; -+ /* If we are at the last line (current_line == from) but we have -+ timestamps (has_timestamps), then line_start points to the -+ text of the last command, and we need to skip to its end. */ -+ if (current_line >= from && has_timestamps) -+ { -+ for (line_end = p; line_end < bufend && *line_end != '\n'; line_end++) -+ ; -+ line_start = (*line_end == '\n') ? line_end + 1 : line_end; -+ } - } - - -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 12 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-014 b/src/patches/bash/bash50-014 deleted file mode 100644 index 6cb49aae72..0000000000 --- a/src/patches/bash/bash50-014 +++ /dev/null @@ -1,52 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-014 - -Bug-Reported-by: Johannes Hielscher -Bug-Reference-ID: <20190208205048.77c25a83@hordevm> -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-02/msg00032.html - -Bug-Description: - -If the current line is empty, using the emacs C-xC-e binding to enter the -editor will edit the previous command instead of the current (empty) one. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/bashline.c 2019-01-16 16:13:21.000000000 -0500 ---- bashline.c 2019-02-11 11:18:57.000000000 -0500 -*************** -*** 962,970 **** - finished with the command, so we should not ignore the last command */ - using_history (); -! if (rl_line_buffer[0]) -! { -! current_command_line_count++; /* for rl_newline above */ -! bash_add_history (rl_line_buffer); -! } - current_command_line_count = 0; /* for dummy history entry */ - bash_add_history (""); ---- 965,970 ---- - finished with the command, so we should not ignore the last command */ - using_history (); -! current_command_line_count++; /* for rl_newline above */ -! bash_add_history (rl_line_buffer); - current_command_line_count = 0; /* for dummy history entry */ - bash_add_history (""); -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 13 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-015 b/src/patches/bash/bash50-015 deleted file mode 100644 index ff6e5e69d6..0000000000 --- a/src/patches/bash/bash50-015 +++ /dev/null @@ -1,78 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-015 - -Bug-Reported-by: Yu Kou -Bug-Reference-ID: -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-05/msg00032.html - -Bug-Description: - -If alias expansion is enabled when processing the command argument to the -`-c' option, an alias is defined in that command, and the command ends with -the invocation of that alias, the shell's command parser can prematurely -terminate before the entire command is executed. - -Patch (apply with `patch -p0'): - -*** ../bash-20190426/builtins/evalstring.c 2019-01-29 14:15:19.000000000 -0500 ---- builtins/evalstring.c 2019-05-15 14:19:36.000000000 -0400 -*************** -*** 92,95 **** ---- 92,96 ---- - running_trap == 0 && - *bash_input.location.string == '\0' && -+ parser_expanding_alias () == 0 && - command->type == cm_simple && - signal_is_trapped (EXIT_TRAP) == 0 && -*************** -*** 106,109 **** ---- 107,111 ---- - { - return (*bash_input.location.string == '\0' && -+ parser_expanding_alias () == 0 && - (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && - command->value.Connection->second->type == cm_simple); -*************** -*** 291,295 **** - with_input_from_string (string, from_file); - clear_shell_input_line (); -! while (*(bash_input.location.string)) - { - command = (COMMAND *)NULL; ---- 293,297 ---- - with_input_from_string (string, from_file); - clear_shell_input_line (); -! while (*(bash_input.location.string) || parser_expanding_alias ()) - { - command = (COMMAND *)NULL; -*************** -*** 546,550 **** - - with_input_from_string (string, from_file); -! while (*(bash_input.location.string)) - { - command = (COMMAND *)NULL; ---- 548,552 ---- - - with_input_from_string (string, from_file); -! while (*(bash_input.location.string)) /* XXX - parser_expanding_alias () ? */ - { - command = (COMMAND *)NULL; -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 14 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-016 b/src/patches/bash/bash50-016 deleted file mode 100644 index 87f232d7ad..0000000000 --- a/src/patches/bash/bash50-016 +++ /dev/null @@ -1,58 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-016 - -Bug-Reported-by: sunnycemetery@gmail.com -Bug-Reference-ID: <20190316041534.GB22884@midnight> -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-03/msg00070.html - -Bug-Description: - -Bash waits too long to reap /dev/fd process substitutions used as redirections -with loops and group commands, which can lead to file descriptor exhaustion. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/execute_cmd.c 2019-04-19 15:46:36.000000000 -0400 ---- execute_cmd.c 2019-07-01 16:45:49.000000000 -0400 -*************** -*** 1104,1107 **** ---- 1085,1104 ---- - discard_unwind_frame ("internal_fifos"); - } -+ # if defined (HAVE_DEV_FD) -+ /* Reap process substitutions at the end of loops */ -+ switch (command->type) -+ { -+ case cm_while: -+ case cm_until: -+ case cm_for: -+ case cm_group: -+ # if defined (ARITH_FOR_COMMAND) -+ case cm_arith_for: -+ # endif -+ reap_procsubs (); -+ default: -+ break; -+ } -+ # endif /* HAVE_DEV_FD */ - #endif - - -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 15 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-017 b/src/patches/bash/bash50-017 deleted file mode 100644 index adfcb6a860..0000000000 --- a/src/patches/bash/bash50-017 +++ /dev/null @@ -1,289 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-017 - -Bug-Reported-by: Valentin Lab -Bug-Reference-ID: -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-03/msg00062.html - -Bug-Description: - -There were cases where patch 16 reaped process substitution file descriptors -(or FIFOs) and processes to early. This is a better fix for the problem that -bash50-016 attempted to solve. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0-patched/subst.c 2019-08-29 11:16:49.000000000 -0400 ---- subst.c 2020-04-02 16:24:19.000000000 -0400 -*************** -*** 5337,5341 **** - } - -! char * - copy_fifo_list (sizep) - int *sizep; ---- 5337,5341 ---- - } - -! void * - copy_fifo_list (sizep) - int *sizep; -*************** -*** 5343,5347 **** - if (sizep) - *sizep = 0; -! return (char *)NULL; - } - ---- 5343,5347 ---- - if (sizep) - *sizep = 0; -! return (void *)NULL; - } - -*************** -*** 5409,5414 **** - if (fifo_list[i].file) - { -! fifo_list[j].file = fifo_list[i].file; -! fifo_list[j].proc = fifo_list[i].proc; - j++; - } ---- 5409,5419 ---- - if (fifo_list[i].file) - { -! if (i != j) -! { -! fifo_list[j].file = fifo_list[i].file; -! fifo_list[j].proc = fifo_list[i].proc; -! fifo_list[i].file = (char *)NULL; -! fifo_list[i].proc = 0; -! } - j++; - } -*************** -*** 5426,5433 **** - void - close_new_fifos (list, lsize) -! char *list; - int lsize; - { - int i; - - if (list == 0) ---- 5431,5439 ---- - void - close_new_fifos (list, lsize) -! void *list; - int lsize; - { - int i; -+ char *plist; - - if (list == 0) -*************** -*** 5437,5442 **** - } - -! for (i = 0; i < lsize; i++) -! if (list[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1) - unlink_fifo (i); - ---- 5443,5448 ---- - } - -! for (plist = (char *)list, i = 0; i < lsize; i++) -! if (plist[i] == 0 && i < fifo_list_size && fifo_list[i].proc != -1) - unlink_fifo (i); - -*************** -*** 5560,5568 **** - } - -! char * - copy_fifo_list (sizep) - int *sizep; - { -! char *ret; - - if (nfds == 0 || totfds == 0) ---- 5566,5574 ---- - } - -! void * - copy_fifo_list (sizep) - int *sizep; - { -! void *ret; - - if (nfds == 0 || totfds == 0) -*************** -*** 5570,5579 **** - if (sizep) - *sizep = 0; -! return (char *)NULL; - } - - if (sizep) - *sizep = totfds; -! ret = (char *)xmalloc (totfds * sizeof (pid_t)); - return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); - } ---- 5576,5585 ---- - if (sizep) - *sizep = 0; -! return (void *)NULL; - } - - if (sizep) - *sizep = totfds; -! ret = xmalloc (totfds * sizeof (pid_t)); - return (memcpy (ret, dev_fd_list, totfds * sizeof (pid_t))); - } -*************** -*** 5648,5655 **** - void - close_new_fifos (list, lsize) -! char *list; - int lsize; - { - int i; - - if (list == 0) ---- 5654,5662 ---- - void - close_new_fifos (list, lsize) -! void *list; - int lsize; - { - int i; -+ pid_t *plist; - - if (list == 0) -*************** -*** 5659,5664 **** - } - -! for (i = 0; i < lsize; i++) -! if (list[i] == 0 && i < totfds && dev_fd_list[i]) - unlink_fifo (i); - ---- 5666,5671 ---- - } - -! for (plist = (pid_t *)list, i = 0; i < lsize; i++) -! if (plist[i] == 0 && i < totfds && dev_fd_list[i]) - unlink_fifo (i); - -*** ../bash-5.0-patched/subst.h 2018-10-21 18:46:09.000000000 -0400 ---- subst.h 2020-04-02 16:29:28.000000000 -0400 -*************** -*** 274,280 **** - extern void unlink_fifo __P((int)); - -! extern char *copy_fifo_list __P((int *)); -! extern void unlink_new_fifos __P((char *, int)); -! extern void close_new_fifos __P((char *, int)); - - extern void clear_fifo_list __P((void)); ---- 274,279 ---- - extern void unlink_fifo __P((int)); - -! extern void *copy_fifo_list __P((int *)); -! extern void close_new_fifos __P((void *, int)); - - extern void clear_fifo_list __P((void)); -*** ../bash-5.0-patched/execute_cmd.c 2020-02-06 20:16:48.000000000 -0500 ---- execute_cmd.c 2020-04-02 17:00:10.000000000 -0400 -*************** -*** 565,569 **** - #if defined (PROCESS_SUBSTITUTION) - volatile int ofifo, nfifo, osize, saved_fifo; -! volatile char *ofifo_list; - #endif - ---- 565,569 ---- - #if defined (PROCESS_SUBSTITUTION) - volatile int ofifo, nfifo, osize, saved_fifo; -! volatile void *ofifo_list; - #endif - -*************** -*** 751,760 **** - # endif - -! if (variable_context != 0) /* XXX - also if sourcelevel != 0? */ - { - ofifo = num_fifos (); - ofifo_list = copy_fifo_list ((int *)&osize); - begin_unwind_frame ("internal_fifos"); -! add_unwind_protect (xfree, ofifo_list); - saved_fifo = 1; - } ---- 751,762 ---- - # endif - -! /* XXX - also if sourcelevel != 0? */ -! if (variable_context != 0) - { - ofifo = num_fifos (); - ofifo_list = copy_fifo_list ((int *)&osize); - begin_unwind_frame ("internal_fifos"); -! if (ofifo_list) -! add_unwind_protect (xfree, ofifo_list); - saved_fifo = 1; - } -*************** -*** 1100,1123 **** - nfifo = num_fifos (); - if (nfifo > ofifo) -! close_new_fifos ((char *)ofifo_list, osize); - free ((void *)ofifo_list); - discard_unwind_frame ("internal_fifos"); - } -- # if defined (HAVE_DEV_FD) -- /* Reap process substitutions at the end of loops */ -- switch (command->type) -- { -- case cm_while: -- case cm_until: -- case cm_for: -- case cm_group: -- # if defined (ARITH_FOR_COMMAND) -- case cm_arith_for: -- # endif -- reap_procsubs (); -- default: -- break; -- } -- # endif /* HAVE_DEV_FD */ - #endif - ---- 1102,1109 ---- - nfifo = num_fifos (); - if (nfifo > ofifo) -! close_new_fifos ((void *)ofifo_list, osize); - free ((void *)ofifo_list); - discard_unwind_frame ("internal_fifos"); - } - #endif - - -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 16 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash50-018 b/src/patches/bash/bash50-018 deleted file mode 100644 index 6f1b1c7ca3..0000000000 --- a/src/patches/bash/bash50-018 +++ /dev/null @@ -1,45 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 5.0 -Patch-ID: bash50-018 - -Bug-Reported-by: oguzismailuysal@gmail.com -Bug-Reference-ID: -Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2019-10/msg00098.html - -Bug-Description: - -In certain cases, bash does not perform quoted null removal on patterns -that are used as part of word expansions such as ${parameter##pattern}, so -empty patterns are treated as non-empty. - -Patch (apply with `patch -p0'): - -*** ../bash-5.0.17/subst.c 2020-04-02 17:14:58.000000000 -0400 ---- subst.c 2020-07-09 15:28:19.000000000 -0400 -*************** -*** 5113,5116 **** ---- 5113,5118 ---- - (int *)NULL, (int *)NULL) - : (WORD_LIST *)0; -+ if (l) -+ word_list_remove_quoted_nulls (l); - pat = string_list (l); - dispose_words (l); - -*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400 ---- patchlevel.h 2016-10-01 11:01:28.000000000 -0400 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 17 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash51-001 b/src/patches/bash/bash51-001 new file mode 100644 index 0000000000..6f29981d25 --- /dev/null +++ b/src/patches/bash/bash51-001 @@ -0,0 +1,80 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.1 +Patch-ID: bash51-001 + +Bug-Reported-by: Fazal Majid +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00000.html + +Bug-Description: + +There is a missing dependency on a constructed file, which can cause highly +parellel builds to fail. + +Patch (apply with `patch -p0'): + +*** ../bash-5.1-patched/Makefile.in 2020-12-04 09:51:19.000000000 -0500 +--- Makefile.in 2020-12-16 11:28:36.000000000 -0500 +*************** +*** 1316,1319 **** +--- 1316,1320 ---- + bashline.o: pcomplete.h ${BASHINCDIR}/chartypes.h input.h + bashline.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h ++ bashline.o: ${DEFDIR}/builtext.h + bracecomp.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h + bracecomp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h +*************** +*** 1436,1439 **** +--- 1437,1441 ---- + builtins/evalstring.o: jobs.h builtins.h flags.h input.h execute_cmd.h + builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h pathnames.h ++ builtins/evalstring.o: ${DEFDIR}/builtext.h + builtins/getopt.o: config.h ${BASHINCDIR}/memalloc.h + builtins/getopt.o: shell.h syntax.h bashjmp.h command.h general.h xmalloc.h error.h + +*** ../bash-5.1-patched/builtins/Makefile.in 2019-07-25 08:03:45.000000000 -0400 +--- builtins/Makefile.in 2020-12-16 11:29:29.000000000 -0500 +*************** +*** 362,366 **** + evalstring.o: $(topdir)/flags.h $(topdir)/input.h $(topdir)/execute_cmd.h + evalstring.o: $(topdir)/bashhist.h $(srcdir)/common.h +! evalstring.o: $(topdir)/trap.h $(topdir)/redir.h ../pathnames.h + #evalstring.o: $(topdir)/y.tab.h + getopt.o: ../config.h $(BASHINCDIR)/memalloc.h +--- 362,366 ---- + evalstring.o: $(topdir)/flags.h $(topdir)/input.h $(topdir)/execute_cmd.h + evalstring.o: $(topdir)/bashhist.h $(srcdir)/common.h +! evalstring.o: $(topdir)/trap.h $(topdir)/redir.h ../pathnames.h ./builtext.h + #evalstring.o: $(topdir)/y.tab.h + getopt.o: ../config.h $(BASHINCDIR)/memalloc.h + +*** ../bash-5.1/patchlevel.h 2020-06-22 14:51:03.000000000 -0400 +--- patchlevel.h 2020-10-01 11:01:28.000000000 -0400 +*************** +*** 1,5 **** + /* patchlevel.h -- current bash patch level */ + +! /* Copyright (C) 2001-2016 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +--- 1,5 ---- + /* patchlevel.h -- current bash patch level */ + +! /* Copyright (C) 2001-2020 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 0 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash51-002 b/src/patches/bash/bash51-002 new file mode 100644 index 0000000000..8c991649a2 --- /dev/null +++ b/src/patches/bash/bash51-002 @@ -0,0 +1,57 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.1 +Patch-ID: bash51-002 + +Bug-Reported-by: oguzismailuysal@gmail.com +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00037.html + +Bug-Description: + +If there are no jobs, and the `-n' and `-p' options are both supplied to +`wait', bash can assign a value to the variable name specified with `-p' +instead of leaving it unset. + +Patch (apply with `patch -p0'): + +*** ../bash-5.1-patched/builtins/wait.def 2020-04-09 15:13:57.000000000 -0400 +--- builtins/wait.def 2020-12-11 09:46:49.000000000 -0500 +*************** +*** 214,222 **** + + status = wait_for_any_job (wflags, &pstat); +- if (status < 0) +- status = 127; +- + if (vname && status >= 0) + bind_var_to_int (vname, pstat.pid); + if (list) + unset_waitlist (); +--- 214,222 ---- + + status = wait_for_any_job (wflags, &pstat); + if (vname && status >= 0) + bind_var_to_int (vname, pstat.pid); ++ ++ if (status < 0) ++ status = 127; + if (list) + unset_waitlist (); + +*** ../bash-5.1/patchlevel.h 2020-06-22 14:51:03.000000000 -0400 +--- patchlevel.h 2020-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 1 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash51-003 b/src/patches/bash/bash51-003 new file mode 100644 index 0000000000..68e5dce6aa --- /dev/null +++ b/src/patches/bash/bash51-003 @@ -0,0 +1,53 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.1 +Patch-ID: bash51-003 + +Bug-Reported-by: oguzismailuysal@gmail.com +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00050.html + +Bug-Description: + +Bash does not put a command substitution process that is started to perform an +expansion in a child process into the right process group where it can receive +keyboard-generated signals. + +Patch (apply with `patch -p0'): + +*** ../bash-5.1-patched/subst.c 2020-11-16 10:33:15.000000000 -0500 +--- subst.c 2020-12-12 13:50:11.000000000 -0500 +*************** +*** 6357,6362 **** + #if defined (JOB_CONTROL) + old_pipeline_pgrp = pipeline_pgrp; +! /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline. */ +! if ((subshell_environment & SUBSHELL_PIPE) == 0) + pipeline_pgrp = shell_pgrp; + cleanup_the_pipeline (); +--- 6357,6364 ---- + #if defined (JOB_CONTROL) + old_pipeline_pgrp = pipeline_pgrp; +! /* Don't reset the pipeline pgrp if we're already a subshell in a pipeline or +! we've already forked to run a disk command (and are expanding redirections, +! for example). */ +! if ((subshell_environment & (SUBSHELL_FORK|SUBSHELL_PIPE)) == 0) + pipeline_pgrp = shell_pgrp; + cleanup_the_pipeline (); + +*** ../bash-5.1/patchlevel.h 2020-06-22 14:51:03.000000000 -0400 +--- patchlevel.h 2020-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 2 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ diff --git a/src/patches/bash/bash51-004 b/src/patches/bash/bash51-004 new file mode 100644 index 0000000000..39a6c647fe --- /dev/null +++ b/src/patches/bash/bash51-004 @@ -0,0 +1,126 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.1 +Patch-ID: bash51-004 + +Bug-Reported-by: oguzismailuysal@gmail.com +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2020-12/msg00039.html + +Bug-Description: + +If a key-value compound array assignment to an associative array is supplied +as an assignment statement argument to the `declare' command that declares the +array, the assignment doesn't perform the correct word expansions. + +This patch makes key-value assignment and subscript assignment perform the +same expansions when they're supplied as an argument to `declare'. + +Patch (apply with `patch -p0'): + +*** ../bash-5.1-patched/arrayfunc.c 2020-10-09 11:38:58.000000000 -0400 +--- arrayfunc.c 2020-12-11 15:12:22.000000000 -0500 +*************** +*** 598,601 **** +--- 598,622 ---- + } + } ++ ++ /* Return non-zero if L appears to be a key-value pair associative array ++ compound assignment. */ ++ int ++ kvpair_assignment_p (l) ++ WORD_LIST *l; ++ { ++ return (l && (l->word->flags & W_ASSIGNMENT) == 0 && l->word->word[0] != '['); /*]*/ ++ } ++ ++ char * ++ expand_and_quote_kvpair_word (w) ++ char *w; ++ { ++ char *t, *r; ++ ++ t = w ? expand_assignment_string_to_string (w, 0) : 0; ++ r = sh_single_quote (t ? t : ""); ++ free (t); ++ return r; ++ } + #endif + +*************** +*** 641,645 **** + + #if ASSOC_KVPAIR_ASSIGNMENT +! if (assoc_p (var) && nlist && (nlist->word->flags & W_ASSIGNMENT) == 0 && nlist->word->word[0] != '[') /*]*/ + { + iflags = flags & ~ASS_APPEND; +--- 662,666 ---- + + #if ASSOC_KVPAIR_ASSIGNMENT +! if (assoc_p (var) && kvpair_assignment_p (nlist)) + { + iflags = flags & ~ASS_APPEND; +*** ../bash-5.1-patched/arrayfunc.h 2020-04-29 17:24:15.000000000 -0400 +--- arrayfunc.h 2020-12-11 14:23:50.000000000 -0500 +*************** +*** 68,71 **** +--- 68,74 ---- + extern void quote_compound_array_list PARAMS((WORD_LIST *, int)); + ++ extern int kvpair_assignment_p PARAMS((WORD_LIST *)); ++ extern char *expand_and_quote_kvpair_word PARAMS((char *)); ++ + extern int unbind_array_element PARAMS((SHELL_VAR *, char *, int)); + extern int skipsubscript PARAMS((const char *, int, int)); +*** ../bash-5.1-patched/subst.c 2020-11-16 10:33:15.000000000 -0500 +--- subst.c 2020-12-11 15:11:10.000000000 -0500 +*************** +*** 11605,11608 **** +--- 11605,11609 ---- + WORD_LIST *l, *nl; + char *t; ++ int kvpair; + + if (flags == 0) +*************** +*** 11619,11622 **** +--- 11620,11627 ---- + /* Associative array */ + l = parse_string_to_word_list (value, 1, "array assign"); ++ #if ASSOC_KVPAIR_ASSIGNMENT ++ kvpair = kvpair_assignment_p (l); ++ #endif ++ + /* For associative arrays, with their arbitrary subscripts, we have to + expand and quote in one step so we don't have to search for the +*************** +*** 11624,11627 **** +--- 11629,11638 ---- + for (nl = l; nl; nl = nl->next) + { ++ #if ASSOC_KVPAIR_ASSIGNMENT ++ if (kvpair) ++ /* keys and values undergo the same set of expansions */ ++ t = expand_and_quote_kvpair_word (nl->word->word); ++ else ++ #endif + if ((nl->word->flags & W_ASSIGNMENT) == 0) + t = sh_single_quote (nl->word->word ? nl->word->word : ""); + +*** ../bash-5.1/patchlevel.h 2020-06-22 14:51:03.000000000 -0400 +--- patchlevel.h 2020-10-01 11:01:28.000000000 -0400 +*************** +*** 26,30 **** + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 3 + + #endif /* _PATCHLEVEL_H_ */ +--- 26,30 ---- + looks for to find the patch level (for the sccs version string). */ + +! #define PATCHLEVEL 4 + + #endif /* _PATCHLEVEL_H_ */ -- 2.39.5