diff --git a/bash-5.0-patch12.patch b/bash-5.0-patch12.patch new file mode 100644 index 0000000000000000000000000000000000000000..770e52c145d10c80dc4c8e89a91dbd80382bd379 --- /dev/null +++ b/bash-5.0-patch12.patch @@ -0,0 +1,56 @@ +From b0852fb54efbcee630847fcfdc435133f82043b9 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +Date: Fri, 7 Feb 2020 15:16:28 -0500 +Subject: [PATCH 1/5] Bash-5.0 patch 12: fix problems moving back beyond start + of history + +--- + lib/readline/misc.c | 5 ++++- + patchlevel.h | 2 +- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/lib/readline/misc.c b/lib/readline/misc.c +index 64b1457..42005b0 100644 +--- a/lib/readline/misc.c ++++ b/lib/readline/misc.c +@@ -576,6 +576,7 @@ int + rl_get_previous_history (int count, int key) + { + HIST_ENTRY *old_temp, *temp; ++ int had_saved_line; + + if (count < 0) + return (rl_get_next_history (-count, key)); +@@ -588,6 +589,7 @@ rl_get_previous_history (int count, int key) + _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; + + /* 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 (); + + /* If the current line has changed, save the changes. */ +@@ -611,7 +613,8 @@ rl_get_previous_history (int count, int key) + + if (temp == 0) + { +- rl_maybe_unsave_line (); ++ if (had_saved_line == 0) ++ _rl_free_saved_history_line (); + rl_ding (); + } + else +diff --git a/patchlevel.h b/patchlevel.h +index 772676c..93dbe0d 100644 +--- 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_ */ +-- +1.8.3.1 + diff --git a/bash-5.0-patch13.patch b/bash-5.0-patch13.patch new file mode 100644 index 0000000000000000000000000000000000000000..571c1e823bac43c84cbab1fb72d9871fe986864d --- /dev/null +++ b/bash-5.0-patch13.patch @@ -0,0 +1,62 @@ +From f747f9ff4c8aed2d51fa54db3cb10e8118034753 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +Date: Fri, 7 Feb 2020 15:17:29 -0500 +Subject: [PATCH 2/5] Bash-5.0 patch 13: reading history entries with + timestamps can result in joined entries + +--- + lib/readline/histfile.c | 15 ++++++++++++++- + patchlevel.h | 2 +- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/lib/readline/histfile.c b/lib/readline/histfile.c +index a8a92aa..6c3adc9 100644 +--- a/lib/readline/histfile.c ++++ b/lib/readline/histfile.c +@@ -369,9 +369,11 @@ read_history_range (const char *filename, int from, int to) + } + + has_timestamps = HIST_TIMESTAMP_START (buffer); +- history_multiline_entries += has_timestamps && history_write_timestamps; ++ 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') + { +@@ -380,7 +382,18 @@ read_history_range (const char *filename, int from, int to) + line. We should check more extensively here... */ + 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; ++ } + } + + /* If there are lines left to gobble, then gobble them now. */ +diff --git a/patchlevel.h b/patchlevel.h +index 93dbe0d..779671c 100644 +--- 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_ */ +-- +1.8.3.1 + diff --git a/bash-5.0-patch14.patch b/bash-5.0-patch14.patch new file mode 100644 index 0000000000000000000000000000000000000000..340fa7f88ee7ccd1b971f054301e347f44268a58 --- /dev/null +++ b/bash-5.0-patch14.patch @@ -0,0 +1,44 @@ +From 8b6524c482573ea12eb20be756cdb8ca31d945f3 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +Date: Fri, 7 Feb 2020 15:18:41 -0500 +Subject: [PATCH 3/5] Bash-5.0 patch 14: edit-and-execute-command does not + handle empty command lines + +--- + bashline.c | 7 ++----- + patchlevel.h | 2 +- + 2 files changed, 3 insertions(+), 6 deletions(-) + +diff --git a/bashline.c b/bashline.c +index 824ea9d..97adaa0 100644 +--- a/bashline.c ++++ b/bashline.c +@@ -961,11 +961,8 @@ edit_and_execute_command (count, c, editing_mode, edit_command) + /* This breaks down when using command-oriented history and are not + 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++; /* for rl_newline above */ ++ bash_add_history (rl_line_buffer); + current_command_line_count = 0; /* for dummy history entry */ + bash_add_history (""); + history_lines_this_session++; +diff --git a/patchlevel.h b/patchlevel.h +index 779671c..09a3cc8 100644 +--- 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_ */ +-- +1.8.3.1 + diff --git a/bash-5.0-patch15.patch b/bash-5.0-patch15.patch new file mode 100644 index 0000000000000000000000000000000000000000..b40b54ebdc5f00daa4380da207272df339393d04 --- /dev/null +++ b/bash-5.0-patch15.patch @@ -0,0 +1,64 @@ +From ad1b3e68229273b4983b607c5eeb56551536c583 Mon Sep 17 00:00:00 2001 +From: Chet Ramey +Date: Fri, 7 Feb 2020 15:19:53 -0500 +Subject: [PATCH 4/5] Bash-5.0 patch 15: aliases and -c commands can cause + premature termination + +--- + builtins/evalstring.c | 6 ++++-- + patchlevel.h | 2 +- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/builtins/evalstring.c b/builtins/evalstring.c +index cadc9bc..2f13a66 100644 +--- a/builtins/evalstring.c ++++ b/builtins/evalstring.c +@@ -91,6 +91,7 @@ should_suppress_fork (command) + return (startup_state == 2 && parse_and_execute_level == 1 && + running_trap == 0 && + *bash_input.location.string == '\0' && ++ parser_expanding_alias () == 0 && + command->type == cm_simple && + signal_is_trapped (EXIT_TRAP) == 0 && + signal_is_trapped (ERROR_TRAP) == 0 && +@@ -105,6 +106,7 @@ can_optimize_connection (command) + COMMAND *command; + { + 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); + } +@@ -290,7 +292,7 @@ parse_and_execute (string, from_file, flags) + + with_input_from_string (string, from_file); + clear_shell_input_line (); +- while (*(bash_input.location.string)) ++ while (*(bash_input.location.string) || parser_expanding_alias ()) + { + command = (COMMAND *)NULL; + +@@ -545,7 +547,7 @@ parse_string (string, from_file, flags, endp) + ostring = string; + + with_input_from_string (string, from_file); +- while (*(bash_input.location.string)) ++ while (*(bash_input.location.string)) /* XXX - parser_expanding_alias () ? */ + { + command = (COMMAND *)NULL; + +diff --git a/patchlevel.h b/patchlevel.h +index 09a3cc8..6e9ed3f 100644 +--- 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_ */ +-- +1.8.3.1 + diff --git a/bash-5.0-patch16.patch b/bash-5.0-patch16.patch new file mode 100644 index 0000000000000000000000000000000000000000..9197910944b6553fb59878e610e1c948f0a55698 --- /dev/null +++ b/bash-5.0-patch16.patch @@ -0,0 +1,53 @@ +From 6c6454cb18d7cd30b3b26d5ba6479431e599f3ed Mon Sep 17 00:00:00 2001 +From: Chet Ramey +Date: Fri, 7 Feb 2020 15:20:38 -0500 +Subject: [PATCH 5/5] Bash-5.0 patch 16: bash waits too long to reap /dev/fd + process substitutions with loops and group commands + +--- + execute_cmd.c | 16 ++++++++++++++++ + patchlevel.h | 2 +- + 2 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/execute_cmd.c b/execute_cmd.c +index f1d74bf..3864986 100644 +--- a/execute_cmd.c ++++ b/execute_cmd.c +@@ -1103,6 +1103,22 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, + 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 + + /* Invert the return value if we have to */ +diff --git a/patchlevel.h b/patchlevel.h +index 6e9ed3f..9074f4d 100644 +--- 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_ */ +-- +1.8.3.1 + diff --git a/bash.spec b/bash.spec index f3e1d61f3a0b7054a052d1351ad93efc3a5fa803..18fa85eb23a86043f8ba5b4388f2a3b2212c85ee 100644 --- a/bash.spec +++ b/bash.spec @@ -22,21 +22,28 @@ Patch8: bash-5.0-patch8.patch Patch9: bash-5.0-patch9.patch Patch10: bash-5.0-patch10.patch Patch11: bash-5.0-patch11.patch +Patch12: bash-5.0-patch12.patch +Patch13: bash-5.0-patch13.patch +Patch14: bash-5.0-patch14.patch +Patch15: bash-5.0-patch15.patch +Patch16: bash-5.0-patch16.patch -Patch15: bash-2.05a-interpreter.patch -Patch18: bash-2.05b-pgrp_sync.patch -Patch25: bash-4.0-nobits.patch -Patch29: bash-4.2-coverity.patch + + +Patch115: bash-2.05a-interpreter.patch +Patch118: bash-2.05b-pgrp_sync.patch +Patch125: bash-4.0-nobits.patch +Patch129: bash-4.2-coverity.patch # rh1102815 -Patch33: bash-4.3-noecho.patch +Patch133: bash-4.3-noecho.patch # fix bash leaks memory when LC_ALL set-rh1241533,rh1224855 -Patch34: bash-4.3-memleak-lc_all.patch +Patch134: bash-4.3-memleak-lc_all.patch # https://git.savannah.gnu.org/cgit/bash.git/commit/?h=devel&id=951bdaad7a18cc0dc1036bba86b18b90874d39ff -Patch35: CVE-2019-18276.patch +Patch135: CVE-2019-18276.patch # https://github.com/bminor/bash/commit/db26b1cf58aab63c39fd5665590cad3cb75eab72.patch -Patch36: commit-bash-20190913-snapshot.patch -Patch37:bugfix-Forbidden-non-root-user-to-clear-history.patch -Patch38:enable-dot-logout-and-source-bashrc-through-ssh.patch +Patch136: commit-bash-20190913-snapshot.patch +Patch137:bugfix-Forbidden-non-root-user-to-clear-history.patch +Patch138:enable-dot-logout-and-source-bashrc-through-ssh.patch BuildRequires: gcc bison texinfo autoconf ncurses-devel @@ -123,6 +130,12 @@ make check %exclude %{_infodir}/dir %changelog +* Wed Apr 8 2020 openEuler Buildteam - 5.0-13 +- Type:enhancement +- ID:NA +- SUG:NA +- DESC:add upstream patches + * Thu Mar 19 2020 openEuler Buildteam - 5.0-12 - Type:enhancement - ID:NA