diff --git a/system/base/bash/files/fedora/bash-2.05b-pgrp_sync.patch b/system/base/bash/files/fedora/bash-2.05b-pgrp_sync.patch index bd7ded60..cc985187 100644 --- a/system/base/bash/files/fedora/bash-2.05b-pgrp_sync.patch +++ b/system/base/bash/files/fedora/bash-2.05b-pgrp_sync.patch @@ -1,11 +1,12 @@ ---- bash-2.05b/aclocal.m4.pgrp_sync 2002-06-25 14:45:43.000000000 +0100 -+++ bash-2.05b/aclocal.m4 2003-01-15 18:17:35.000000000 +0000 -@@ -1255,7 +1255,7 @@ +diff --git a/aclocal.m4 b/aclocal.m4 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1324,7 +1324,7 @@ main() wait(&status); exit(ok ? 0 : 5); } --], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes, -+], bash_cv_pgrp_pipe=yes,bash_cv_pgrp_pipe=yes, +-]])], [bash_cv_pgrp_pipe=no], [bash_cv_pgrp_pipe=yes], ++]])], [bash_cv_pgrp_pipe=yes], [bash_cv_pgrp_pipe=yes], [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no) - bash_cv_pgrp_pipe=no]) - ]) + bash_cv_pgrp_pipe=no] + )]) diff --git a/system/base/bash/files/fedora/bash-4.1-examples.patch b/system/base/bash/files/fedora/bash-4.1-examples.patch index 19159e75..43407d97 100644 --- a/system/base/bash/files/fedora/bash-4.1-examples.patch +++ b/system/base/bash/files/fedora/bash-4.1-examples.patch @@ -1,18 +1,18 @@ -diff -up bash-4.1/examples/loadables/Makefile.in.examples bash-4.1/examples/loadables/Makefile.in ---- bash-4.1/examples/loadables/Makefile.in.examples 2010-06-22 16:20:02.000000000 +0200 -+++ bash-4.1/examples/loadables/Makefile.in 2010-06-22 16:20:41.000000000 +0200 -@@ -43,7 +43,7 @@ host_os = @host_os@ - host_cpu = @host_cpu@ +diff --git a/examples/loadables/Makefile.in b/examples/loadables/Makefile.in +--- a/examples/loadables/Makefile.in ++++ b/examples/loadables/Makefile.in +@@ -59,7 +59,7 @@ host_cpu = @host_cpu@ host_vendor = @host_vendor@ + STYLE_CFLAGS = @STYLE_CFLAGS@ -CFLAGS = @CFLAGS@ -+CFLAGS = -O2 -g +++CFLAGS = -O2 -g LOCAL_CFLAGS = @LOCAL_CFLAGS@ DEFS = @DEFS@ LOCAL_DEFS = @LOCAL_DEFS@ -diff -up bash-4.1/examples/loadables/perl/Makefile.in.examples bash-4.1/examples/loadables/perl/Makefile.in ---- bash-4.1/examples/loadables/perl/Makefile.in.examples 2010-06-22 16:20:46.000000000 +0200 -+++ bash-4.1/examples/loadables/perl/Makefile.in 2010-06-22 16:21:04.000000000 +0200 +diff --git a/examples/loadables/perl/Makefile.in b/examples/loadables/perl/Makefile.in +--- a/examples/loadables/perl/Makefile.in ++++ b/examples/loadables/perl/Makefile.in @@ -42,7 +42,7 @@ SHELL = @MAKE_SHELL@ PERL5 = perl5 diff --git a/system/base/bash/files/fedora/bash-4.3-noecho.patch b/system/base/bash/files/fedora/bash-4.3-noecho.patch index f20cd6f6..b06d7f48 100644 --- a/system/base/bash/files/fedora/bash-4.3-noecho.patch +++ b/system/base/bash/files/fedora/bash-4.3-noecho.patch @@ -1,21 +1,20 @@ diff --git a/parse.y b/parse.y -index df1231d..2449fa8 100644 --- a/parse.y +++ b/parse.y -@@ -4482,6 +4482,8 @@ xparse_dolparen (base, string, indp, flags) +@@ -4255,7 +4255,8 @@ xparse_dolparen (base, string, indp, flags) + save_parser_state (&ps); save_input_line_state (&ls); - orig_eof_token = shell_eof_token; +- + /* avoid echoing every substitution again */ + echo_input_at_read = 0; #if defined (ALIAS) || defined (DPAREN_ARITHMETIC) - saved_pushed_strings = pushed_string_list; /* separate parsing context */ pushed_string_list = (STRING_SAVER *)NULL; + #endif diff --git a/subst.c b/subst.c -index 9ccbf33..8a9ee5c 100644 --- a/subst.c +++ b/subst.c -@@ -9453,6 +9453,7 @@ param_expand (string, sindex, quoted, expanded_something, +@@ -10222,6 +10222,7 @@ param_expand (string, sindex, quoted, expanded_something, WORD_LIST *list, *l; WORD_DESC *tdesc, *ret; int tflag, nullarg; @@ -23,7 +22,7 @@ index 9ccbf33..8a9ee5c 100644 /*itrace("param_expand: `%s' pflags = %d", string+*sindex, pflags);*/ zindex = *sindex; -@@ -9843,6 +9844,9 @@ arithsub: +@@ -10614,6 +10615,9 @@ arithsub: } comsub: @@ -33,7 +32,7 @@ index 9ccbf33..8a9ee5c 100644 if (pflags & PF_NOCOMSUB) /* we need zindex+1 because string[zindex] == RPAREN */ temp1 = substring (string, *sindex, zindex+1); -@@ -9855,6 +9859,7 @@ comsub: +@@ -10626,6 +10630,7 @@ comsub: } FREE (temp); temp = temp1; diff --git a/system/base/bash/files/fedora/bash-5.0-syslog-history.patch b/system/base/bash/files/fedora/bash-5.0-syslog-history.patch new file mode 100644 index 00000000..dc1ad895 --- /dev/null +++ b/system/base/bash/files/fedora/bash-5.0-syslog-history.patch @@ -0,0 +1,13 @@ +diff --git a/doc/bash.1 b/doc/bash.1 +--- a/doc/bash.1 ++++ b/doc/bash.1 +@@ -10726,6 +10726,9 @@ If set, the shell automatically closes file descriptors assigned using the + .el above) + instead of leaving them open when the command completes. + .TP 8 ++.B syslog_history ++If set, command history is logged to syslog. ++.TP 8 + .B xpg_echo + If set, the \fBecho\fP builtin expands backslash-escape sequences + by default. diff --git a/system/base/bash/files/fedora/bash-requires.patch b/system/base/bash/files/fedora/bash-requires.patch index 86d07926..674e5b94 100644 --- a/system/base/bash/files/fedora/bash-requires.patch +++ b/system/base/bash/files/fedora/bash-requires.patch @@ -1,20 +1,18 @@ diff --git a/builtins.h b/builtins.h -index dac95fd..5b7e811 100644 --- a/builtins.h +++ b/builtins.h -@@ -45,6 +45,7 @@ - #define ASSIGNMENT_BUILTIN 0x10 /* This builtin takes assignment statements. */ +@@ -46,6 +46,7 @@ #define POSIX_BUILTIN 0x20 /* This builtins is special in the Posix command search order. */ #define LOCALVAR_BUILTIN 0x40 /* This builtin creates local variables */ -+#define REQUIRES_BUILTIN 0x80 /* This builtin requires other files. */ + #define ARRAYREF_BUILTIN 0x80 /* This builtin takes array references as arguments */ ++#define REQUIRES_BUILTIN 0x100 /* This builtin requires other files. */ #define BASE_INDENT 4 diff --git a/builtins/mkbuiltins.c b/builtins/mkbuiltins.c -index e243021..0a7a0e5 100644 --- a/builtins/mkbuiltins.c +++ b/builtins/mkbuiltins.c -@@ -69,10 +69,15 @@ extern char *strcpy (); +@@ -69,11 +69,16 @@ extern char *strcpy (); #define whitespace(c) (((c) == ' ') || ((c) == '\t')) /* Flag values that builtins can have. */ @@ -25,15 +23,18 @@ index e243021..0a7a0e5 100644 #define BUILTIN_FLAG_SPECIAL 0x01 #define BUILTIN_FLAG_ASSIGNMENT 0x02 #define BUILTIN_FLAG_LOCALVAR 0x04 - #define BUILTIN_FLAG_POSIX_BUILTIN 0x08 -+#define BUILTIN_FLAG_REQUIRES 0x10 + #define BUILTIN_FLAG_POSIX_BUILTIN 0x08 + #define BUILTIN_FLAG_ARRAYREF_ARG 0x10 ++#define BUILTIN_FLAG_REQUIRES 0x20 #define BASE_INDENT 4 -@@ -173,11 +178,19 @@ char *posix_builtins[] = +@@ -189,13 +194,21 @@ char *arrayvar_builtins[] = + "typeset", "unset", "wait", /*]*/ (char *)NULL }; - +- ++ +/* The builtin commands that cause requirements on other files. */ +static char *requires_builtins[] = +{ @@ -46,36 +47,38 @@ index e243021..0a7a0e5 100644 static int is_assignment_builtin (); static int is_localvar_builtin (); static int is_posix_builtin (); + static int is_arrayvar_builtin (); +static int is_requires_builtin (); #if !defined (HAVE_RENAME) static int rename (); -@@ -831,6 +844,8 @@ builtin_handler (self, defs, arg) - new->flags |= BUILTIN_FLAG_LOCALVAR; - if (is_posix_builtin (name)) +@@ -856,6 +869,8 @@ builtin_handler (self, defs, arg) new->flags |= BUILTIN_FLAG_POSIX_BUILTIN; + if (is_arrayvar_builtin (name)) + new->flags |= BUILTIN_FLAG_ARRAYREF_ARG; + if (is_requires_builtin (name)) + new->flags |= BUILTIN_FLAG_REQUIRES; array_add ((char *)new, defs->builtins); building_builtin = 1; -@@ -1250,12 +1265,13 @@ write_builtins (defs, structfile, externfile) +@@ -1275,13 +1290,14 @@ write_builtins (defs, structfile, externfile) else fprintf (structfile, "(sh_builtin_func_t *)0x0, "); -- fprintf (structfile, "%s%s%s%s%s, %s_doc,\n", -+ fprintf (structfile, "%s%s%s%s%s%s, %s_doc,\n", +- fprintf (structfile, "%s%s%s%s%s%s, %s_doc,\n", ++ fprintf (structfile, "%s%s%s%s%s%s%s, %s_doc,\n", "BUILTIN_ENABLED | STATIC_BUILTIN", (builtin->flags & BUILTIN_FLAG_SPECIAL) ? " | SPECIAL_BUILTIN" : "", (builtin->flags & BUILTIN_FLAG_ASSIGNMENT) ? " | ASSIGNMENT_BUILTIN" : "", (builtin->flags & BUILTIN_FLAG_LOCALVAR) ? " | LOCALVAR_BUILTIN" : "", (builtin->flags & BUILTIN_FLAG_POSIX_BUILTIN) ? " | POSIX_BUILTIN" : "", + (builtin->flags & BUILTIN_FLAG_ARRAYREF_ARG) ? " | ARRAYREF_BUILTIN" : "", + (builtin->flags & BUILTIN_FLAG_REQUIRES) ? " | REQUIRES_BUILTIN" : "", document_name (builtin)); /* Don't translate short document summaries that are identical -@@ -1645,6 +1661,13 @@ is_posix_builtin (name) - return (_find_in_table (name, posix_builtins)); +@@ -1678,6 +1694,13 @@ is_arrayvar_builtin (name) + return (_find_in_table (name, arrayvar_builtins)); } +static int @@ -89,7 +92,6 @@ index e243021..0a7a0e5 100644 static int rename (from, to) diff --git a/doc/bash.1 b/doc/bash.1 -index 5af7d42..7539368 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -239,6 +239,14 @@ The shell becomes restricted (see @@ -108,10 +110,9 @@ index 5af7d42..7539368 100644 Equivalent to \fB\-v\fP. .TP diff --git a/doc/bashref.texi b/doc/bashref.texi -index 9e23f58..d02151e 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi -@@ -6554,6 +6554,13 @@ standard. @xref{Bash POSIX Mode}, for a description of the Bash +@@ -6927,6 +6927,13 @@ standard. @xref{Bash POSIX Mode}, for a description of the Bash @item --restricted Make the shell a restricted shell (@pxref{The Restricted Shell}). @@ -126,10 +127,9 @@ index 9e23f58..d02151e 100644 Equivalent to @option{-v}. Print shell input lines as they're read. diff --git a/eval.c b/eval.c -index 1d967da..f197033 100644 --- a/eval.c +++ b/eval.c -@@ -137,7 +137,8 @@ reader_loop () +@@ -138,7 +138,8 @@ reader_loop () if (read_command () == 0) { @@ -137,13 +137,12 @@ index 1d967da..f197033 100644 + + if (interactive_shell == 0 && (read_but_dont_execute && !rpm_requires)) { - set_exit_status (EXECUTION_SUCCESS); + set_exit_status (last_command_exit_value); dispose_command (global_command); diff --git a/execute_cmd.c b/execute_cmd.c -index d2555ad..397e283 100644 --- a/execute_cmd.c +++ b/execute_cmd.c -@@ -543,6 +543,8 @@ async_redirect_stdin () +@@ -561,6 +561,8 @@ async_redirect_stdin () #define DESCRIBE_PID(pid) do { if (interactive) describe_pid (pid); } while (0) @@ -152,22 +151,22 @@ index d2555ad..397e283 100644 /* Execute the command passed in COMMAND, perhaps doing it asynchronously. COMMAND is exactly what read_command () places into GLOBAL_COMMAND. ASYNCHRONOUS, if non-zero, says to do this command in the background. -@@ -574,7 +576,13 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, +@@ -592,7 +594,13 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out, if (breaking || continuing) return (last_command_exit_value); -- if (command == 0 || read_but_dont_execute) +- if (read_but_dont_execute) + if (command == 0 || (read_but_dont_execute && !rpm_requires)) + return (EXECUTION_SUCCESS); + if (rpm_requires && command->type == cm_function_def) + return last_command_exit_value = + execute_intern_function (command->value.Function_def->name, + command->value.Function_def); -+ if (read_but_dont_execute) ++ if (read_but_dont_execute) + return (last_command_exit_value); + if (command == 0) return (EXECUTION_SUCCESS); - - QUIT; -@@ -2836,7 +2844,7 @@ execute_for_command (for_command) +@@ -2883,7 +2891,7 @@ execute_for_command (for_command) save_line_number = line_number; if (check_identifier (for_command->name, 1) == 0) { @@ -177,7 +176,6 @@ index d2555ad..397e283 100644 last_command_exit_value = EX_BADUSAGE; jump_to_top_level (ERREXIT); diff --git a/execute_cmd.h b/execute_cmd.h -index 465030a..9c7fd1c 100644 --- a/execute_cmd.h +++ b/execute_cmd.h @@ -22,6 +22,9 @@ @@ -191,7 +189,6 @@ index 465030a..9c7fd1c 100644 #if defined (ARRAY_VARS) struct func_array_state diff --git a/make_cmd.c b/make_cmd.c -index 2d7ac96..ac53526 100644 --- a/make_cmd.c +++ b/make_cmd.c @@ -35,6 +35,8 @@ @@ -203,7 +200,7 @@ index 2d7ac96..ac53526 100644 #include "execute_cmd.h" #include "parser.h" #include "flags.h" -@@ -828,6 +830,30 @@ make_coproc_command (name, command) +@@ -839,6 +841,30 @@ make_coproc_command (name, command) return (make_command (cm_coproc, (SIMPLE_COM *)temp)); } @@ -234,7 +231,7 @@ index 2d7ac96..ac53526 100644 /* Reverse the word list and redirection list in the simple command has just been parsed. It seems simpler to do this here the one time then by any other method that I can think of. */ -@@ -845,6 +871,28 @@ clean_simple_command (command) +@@ -856,6 +882,28 @@ clean_simple_command (command) REVERSE_LIST (command->value.Simple->redirects, REDIRECT *); } @@ -264,10 +261,9 @@ index 2d7ac96..ac53526 100644 return (command); } diff --git a/shell.c b/shell.c -index ce8087f..7dcd000 100644 --- a/shell.c +++ b/shell.c -@@ -194,6 +194,9 @@ int have_devfd = 0; +@@ -196,6 +196,9 @@ int have_devfd = 0; /* The name of the .(shell)rc file. */ static char *bashrc_file = DEFAULT_BASHRC; @@ -277,7 +273,7 @@ index ce8087f..7dcd000 100644 /* Non-zero means to act more like the Bourne shell on startup. */ static int act_like_sh; -@@ -260,6 +263,7 @@ static const struct { +@@ -266,6 +269,7 @@ static const struct { { "protected", Int, &protected_mode, (char **)0x0 }, #endif { "rcfile", Charp, (int *)0x0, &bashrc_file }, @@ -285,9 +281,9 @@ index ce8087f..7dcd000 100644 #if defined (RESTRICTED_SHELL) { "restricted", Int, &restricted, (char **)0x0 }, #endif -@@ -502,6 +506,12 @@ main (argc, argv, env) - if (dump_translatable_strings) +@@ -510,6 +514,12 @@ main (argc, argv, env) read_but_dont_execute = 1; + #endif + if (rpm_requires) + { @@ -299,10 +295,9 @@ index ce8087f..7dcd000 100644 disable_priv_mode (); diff --git a/shell.h b/shell.h -index 8b41792..29b0efb 100644 --- a/shell.h +++ b/shell.h -@@ -99,6 +99,7 @@ extern int interactive, interactive_shell; +@@ -100,6 +100,7 @@ extern int interactive, interactive_shell; extern int startup_state; extern int reading_shell_script; extern int shell_initialized; diff --git a/system/base/bash/files/fedora/bash-tty-tests.patch b/system/base/bash/files/fedora/bash-tty-tests.patch index 93117464..ad8a50be 100644 --- a/system/base/bash/files/fedora/bash-tty-tests.patch +++ b/system/base/bash/files/fedora/bash-tty-tests.patch @@ -1,8 +1,7 @@ diff --git a/tests/exec.right b/tests/exec.right -index 0a249dd..fe8a127 100644 --- a/tests/exec.right +++ b/tests/exec.right -@@ -51,7 +51,6 @@ this is ohio-state +@@ -60,7 +60,6 @@ this is ohio-state 0 1 testb @@ -11,7 +10,6 @@ index 0a249dd..fe8a127 100644 1 1 diff --git a/tests/execscript b/tests/execscript -index 2809676..1216828 100644 --- a/tests/execscript +++ b/tests/execscript @@ -108,8 +108,6 @@ ${THIS_SH} ./exec6.sub @@ -24,26 +22,27 @@ index 2809676..1216828 100644 ${THIS_SH} ./exec10.sub diff --git a/tests/read.right b/tests/read.right -index 1144083..09cd422 100644 --- a/tests/read.right +++ b/tests/read.right -@@ -33,14 +33,6 @@ a = abcdefg +@@ -34,17 +34,6 @@ xyz a = xyz a = -xyz 123- a = abc -timeout 1: ok -- +-unset or null 1 -timeout 2: ok -- --./read2.sub: line 36: read: -3: invalid timeout specification +-unset or null 2 +-timeout 3: ok +-unset or null 3 +-./read2.sub: line 45: read: -3: invalid timeout specification -1 - +-abcde -abcde ./read3.sub: line 17: read: -1: invalid number abc - ab + defg diff --git a/tests/read.tests b/tests/read.tests -index 7384f05..43fcf8d 100644 --- a/tests/read.tests +++ b/tests/read.tests @@ -95,9 +95,6 @@ echo " foo" | { IFS=$':' ; read line; recho "$line"; } diff --git a/system/base/bash/files/official/bash52-001.patch b/system/base/bash/files/official/bash52-001.patch new file mode 100644 index 00000000..83776ec7 --- /dev/null +++ b/system/base/bash/files/official/bash52-001.patch @@ -0,0 +1,46 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-001 + +Bug-Reported-by: Emanuele Torre +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-09/msg00060.html + +Bug-Description: + +Expanding unset arrays in an arithmetic context can cause a segmentation fault. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2/subst.c 2022-08-31 17:36:46.000000000 -0400 +--- subst.c 2022-09-30 09:12:05.000000000 -0400 +*************** +*** 10858,10862 **** + t = expand_subscript_string (exp, quoted & ~(Q_ARITH|Q_DOUBLE_QUOTES)); + free (exp); +! exp = sh_backslash_quote (t, abstab, 0); + free (t); + +--- 10858,10862 ---- + t = expand_subscript_string (exp, quoted & ~(Q_ARITH|Q_DOUBLE_QUOTES)); + free (exp); +! exp = t ? sh_backslash_quote (t, abstab, 0) : savestring (""); + free (t); + +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-002.patch b/system/base/bash/files/official/bash52-002.patch new file mode 100644 index 00000000..18229c99 --- /dev/null +++ b/system/base/bash/files/official/bash52-002.patch @@ -0,0 +1,46 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-002 + +Bug-Reported-by: Kan-Ru Chen +Bug-Reference-ID: +Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1021109 + +Bug-Description: + +Starting bash with an invalid locale specification for LC_ALL/LANG/LC_CTYPE +can cause the shell to crash. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/lib/readline/nls.c 2022-08-15 09:38:51.000000000 -0400 +--- lib/readline/nls.c 2022-10-05 09:23:22.000000000 -0400 +*************** +*** 142,145 **** +--- 142,149 ---- + lspec = ""; + ret = setlocale (LC_CTYPE, lspec); /* ok, since it does not change locale */ ++ if (ret == 0 || *ret == 0) ++ ret = setlocale (LC_CTYPE, (char *)NULL); ++ if (ret == 0 || *ret == 0) ++ ret = RL_DEFAULT_LOCALE; + #else + ret = (lspec == 0 || *lspec == 0) ? RL_DEFAULT_LOCALE : lspec; + +*** ../bash-5.2/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/system/base/bash/files/official/bash52-003.patch b/system/base/bash/files/official/bash52-003.patch new file mode 100644 index 00000000..b2dc4cbc --- /dev/null +++ b/system/base/bash/files/official/bash52-003.patch @@ -0,0 +1,89 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-003 + +Bug-Reported-by: D630 +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00092.html + +Bug-Description: + +Command substitutions need to preserve newlines instead of replacing them +with semicolons, especially in the presence of multiple here-documents. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/print_cmd.c 2022-07-26 09:16:39.000000000 -0400 +--- print_cmd.c 2022-10-17 10:41:06.000000000 -0400 +*************** +*** 298,305 **** +--- 298,307 ---- + { + char c = command->value.Connection->connector; ++ int was_newline; + + s[0] = printing_comsub ? c : ';'; + s[1] = '\0'; + ++ was_newline = deferred_heredocs == 0 && was_heredoc == 0 && c == '\n'; + if (deferred_heredocs == 0) + { +*************** +*** 315,318 **** +--- 317,322 ---- + if (inside_function_def) + cprintf ("\n"); ++ else if (printing_comsub && c == '\n' && was_newline == 0) ++ cprintf ("\n"); /* preserve newlines in comsubs but don't double them */ + else + { +*************** +*** 1366,1370 **** + } + else +! newline ("}"); + + dispose_command (cmdcopy); +--- 1371,1379 ---- + } + else +! { +! /* { */ +! newline ("}"); +! was_heredoc = 0; /* not printing any here-documents now */ +! } + + dispose_command (cmdcopy); +*************** +*** 1443,1447 **** + } + else +! newline ("}"); + + result = the_printed_command; +--- 1452,1459 ---- + } + else +! { /* { */ +! newline ("}"); +! was_heredoc = 0; +! } + + result = the_printed_command; +*** ../bash-5.2/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/system/base/bash/files/official/bash52-004.patch b/system/base/bash/files/official/bash52-004.patch new file mode 100644 index 00000000..d0834c19 --- /dev/null +++ b/system/base/bash/files/official/bash52-004.patch @@ -0,0 +1,70 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-004 + +Bug-Reported-by: Antoine +Bug-Reference-ID: <8bd59753-05ff-9b09-2337-2c7f52ded650@glitchimini.net> +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00022.html + +Bug-Description: + +Bash needs to keep better track of nested brace expansions to avoid problems +with quoting and POSIX semantics. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/subst.c 2022-10-05 10:22:02.000000000 -0400 +--- subst.c 2022-10-06 15:19:08.000000000 -0400 +*************** +*** 1799,1802 **** +--- 1804,1810 ---- + } + ++ #define PARAMEXPNEST_MAX 32 // for now ++ static int dbstate[PARAMEXPNEST_MAX]; ++ + /* Extract a parameter expansion expression within ${ and } from STRING. + Obey the Posix.2 rules for finding the ending `}': count braces while +*************** +*** 1829,1832 **** +--- 1837,1842 ---- + return (extract_heredoc_dolbrace_string (string, sindex, quoted, flags)); + ++ dbstate[0] = dolbrace_state; ++ + pass_character = 0; + nesting_level = 1; +*************** +*** 1853,1856 **** +--- 1863,1868 ---- + if (string[i] == '$' && string[i+1] == LBRACE) + { ++ if (nesting_level < PARAMEXPNEST_MAX) ++ dbstate[nesting_level] = dolbrace_state; + nesting_level++; + i += 2; +*************** +*** 1865,1868 **** +--- 1877,1881 ---- + if (nesting_level == 0) + break; ++ dolbrace_state = (nesting_level < PARAMEXPNEST_MAX) ? dbstate[nesting_level] : dbstate[0]; /* Guess using initial state */ + i++; + continue; +*** ../bash-5.2/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_ */ diff --git a/system/base/bash/files/official/bash52-005.patch b/system/base/bash/files/official/bash52-005.patch new file mode 100644 index 00000000..3f6a8521 --- /dev/null +++ b/system/base/bash/files/official/bash52-005.patch @@ -0,0 +1,47 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-005 + +Bug-Reported-by: Justin Wood (Callek) +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00088.html + +Bug-Description: + +Null pattern substitution replacement strings can cause a crash. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/subst.c 2022-10-05 10:22:02.000000000 -0400 +--- subst.c 2022-10-13 16:57:26.000000000 -0400 +*************** +*** 8966,8970 **** + } + else if (*string == 0 && (match_pattern (string, pat, mtype, &s, &e) != 0)) +! return ((mflags & MATCH_EXPREP) ? strcreplace (rep, '&', "", 2) : savestring (rep)); + + ret = (char *)xmalloc (rsize = 64); +--- 8966,8971 ---- + } + else if (*string == 0 && (match_pattern (string, pat, mtype, &s, &e) != 0)) +! return (mflags & MATCH_EXPREP) ? strcreplace (rep, '&', "", 2) +! : (rep ? savestring (rep) : savestring ("")); + + ret = (char *)xmalloc (rsize = 64); +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-006.patch b/system/base/bash/files/official/bash52-006.patch new file mode 100644 index 00000000..851cfd7b --- /dev/null +++ b/system/base/bash/files/official/bash52-006.patch @@ -0,0 +1,293 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-006 + +Bug-Reported-by: feng xiangjun +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00089.html + +Bug-Description: + +In interactive shells, interrupting the shell while entering a command +substitution can inhibit alias expansion. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/parse.y 2022-10-08 13:10:06.000000000 -0400 +--- parse.y 2022-10-14 10:03:19.000000000 -0400 +*************** +*** 3307,3310 **** +--- 3307,3312 ---- + extended_glob = global_extglob; + #endif ++ if (parser_state & (PST_CMDSUBST|PST_STRING)) ++ expand_aliases = expaliases_flag; + + parser_state = 0; +*************** +*** 4389,4392 **** +--- 4391,4395 ---- + parser_state |= PST_NOERROR; + ++ parser_state |= PST_STRING; + expand_aliases = 0; + +*************** +*** 6402,6406 **** + parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */ + /* State flags we want to set for this run through the tokenizer. */ +! parser_state |= PST_COMPASSIGN|PST_REPARSE; + } + +--- 6405,6409 ---- + parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */ + /* State flags we want to set for this run through the tokenizer. */ +! parser_state |= PST_COMPASSIGN|PST_REPARSE|PST_STRING; + } + +*** ../bash-20221007/parser.h 2022-08-30 11:39:56.000000000 -0400 +--- parser.h 2022-10-14 09:56:18.000000000 -0400 +*************** +*** 51,54 **** +--- 51,55 ---- + #define PST_NOEXPAND 0x400000 /* don't expand anything in read_token_word; for command substitution */ + #define PST_NOERROR 0x800000 /* don't print error messages in yyerror */ ++ #define PST_STRING 0x1000000 /* parsing a string to a command or word list */ + + /* Definition of the delimiter stack. Needed by parse.y and bashhist.c. */ +*** ../bash-20221007/builtins/shopt.def 2022-10-07 10:25:55.000000000 -0400 +--- builtins/shopt.def 2022-10-14 09:30:11.000000000 -0400 +*************** +*** 150,153 **** +--- 150,156 ---- + #endif + ++ int expaliases_flag = 0; ++ static int shopt_set_expaliases PARAMS((char *, int)); ++ + static int shopt_set_debug_mode PARAMS((char *, int)); + +*************** +*** 199,203 **** + { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL }, + { "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL }, +! { "expand_aliases", &expand_aliases, (shopt_set_func_t *)NULL }, + #if defined (DEBUGGER) + { "extdebug", &debugging_mode, shopt_set_debug_mode }, +--- 202,206 ---- + { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL }, + { "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL }, +! { "expand_aliases", &expaliases_flag, shopt_set_expaliases }, + #if defined (DEBUGGER) + { "extdebug", &debugging_mode, shopt_set_debug_mode }, +*************** +*** 351,355 **** + allow_null_glob_expansion = glob_dot_filenames = 0; + no_exit_on_failed_exec = 0; +! expand_aliases = 0; + extended_quote = 1; + fail_glob_expansion = 0; +--- 354,358 ---- + allow_null_glob_expansion = glob_dot_filenames = 0; + no_exit_on_failed_exec = 0; +! expand_aliases = expaliases_flag = 0; + extended_quote = 1; + fail_glob_expansion = 0; +*************** +*** 632,635 **** +--- 635,647 ---- + } + ++ static int ++ shopt_set_expaliases (option_name, mode) ++ char *option_name; ++ int mode; ++ { ++ expand_aliases = expaliases_flag; ++ return 0; ++ } ++ + #if defined (READLINE) + static int +*** ../bash-20221007/builtins/common.h 2022-10-07 10:10:17.000000000 -0400 +--- builtins/common.h 2022-10-14 09:29:25.000000000 -0400 +*************** +*** 258,261 **** +--- 258,263 ---- + #endif + ++ extern int expaliases_flag; ++ + /* variables from source.def */ + extern int source_searches_cwd; +*** ../bash-20221007/execute_cmd.c 2022-10-10 10:48:54.000000000 -0400 +--- execute_cmd.c 2022-10-14 09:32:24.000000000 -0400 +*************** +*** 1537,1541 **** + aliases. */ + if (ois != interactive_shell) +! expand_aliases = 0; + } + +--- 1537,1541 ---- + aliases. */ + if (ois != interactive_shell) +! expand_aliases = expaliases_flag = 0; + } + +*** ../bash-20221007/general.c 2021-11-04 14:12:38.000000000 -0400 +--- general.c 2022-10-14 09:34:24.000000000 -0400 +*************** +*** 92,96 **** + &interactive_comments, + &source_uses_path, +! &expand_aliases, + &inherit_errexit, + &print_shift_error, +--- 92,96 ---- + &interactive_comments, + &source_uses_path, +! &expaliases_flag, + &inherit_errexit, + &print_shift_error, +*************** +*** 107,111 **** + if (on != 0) + { +! interactive_comments = source_uses_path = expand_aliases = 1; + inherit_errexit = 1; + source_searches_cwd = 0; +--- 107,112 ---- + if (on != 0) + { +! interactive_comments = source_uses_path = 1; +! expand_aliases = expaliases_flag = 1; + inherit_errexit = 1; + source_searches_cwd = 0; +*************** +*** 117,120 **** +--- 118,122 ---- + { + set_posix_options (saved_posix_vars); ++ expand_aliases = expaliases_flag; + free (saved_posix_vars); + saved_posix_vars = 0; +*************** +*** 123,127 **** + { + source_searches_cwd = 1; +! expand_aliases = interactive_shell; + print_shift_error = 0; + } +--- 125,129 ---- + { + source_searches_cwd = 1; +! expand_aliases = expaliases_flag = interactive_shell; /* XXX */ + print_shift_error = 0; + } + +*** ../bash-5.2-patched/shell.c 2022-03-04 15:13:00.000000000 -0500 +--- shell.c 2022-10-14 09:36:19.000000000 -0400 +*************** +*** 1845,1850 **** + init_interactive () + { +! expand_aliases = interactive_shell = startup_state = 1; +! interactive = 1; + #if defined (HISTORY) + if (enable_history_list == -1) +--- 1845,1850 ---- + init_interactive () + { +! expand_aliases = expaliases_flag = 1; +! interactive_shell = startup_state = interactive = 1; + #if defined (HISTORY) + if (enable_history_list == -1) +*************** +*** 1866,1870 **** + #endif /* HISTORY */ + interactive_shell = startup_state = interactive = 0; +! expand_aliases = posixly_correct; /* XXX - was 0 not posixly_correct */ + no_line_editing = 1; + #if defined (JOB_CONTROL) +--- 1866,1870 ---- + #endif /* HISTORY */ + interactive_shell = startup_state = interactive = 0; +! expand_aliases = expaliases_flag = posixly_correct; /* XXX - was 0 not posixly_correct */ + no_line_editing = 1; + #if defined (JOB_CONTROL) +*************** +*** 1883,1887 **** + #endif + init_noninteractive (); +! expand_aliases = interactive_shell = startup_state = 1; + #if defined (HISTORY) + remember_on_history = enable_history_list; /* XXX */ +--- 1883,1887 ---- + #endif + init_noninteractive (); +! expand_aliases = expaliases_flag = interactive_shell = startup_state = 1; + #if defined (HISTORY) + remember_on_history = enable_history_list; /* XXX */ +*************** +*** 2026,2030 **** + forced_interactive = interactive_shell = 0; + subshell_environment = running_in_background = 0; +! expand_aliases = 0; + bash_argv_initialized = 0; + +--- 2026,2030 ---- + forced_interactive = interactive_shell = 0; + subshell_environment = running_in_background = 0; +! expand_aliases = expaliases_flag = 0; + bash_argv_initialized = 0; + +*** ../bash-5.2-patched/y.tab.c 2022-09-23 10:18:27.000000000 -0400 +--- y.tab.c 2022-10-14 14:57:26.000000000 -0400 +*************** +*** 5618,5621 **** +--- 5618,5623 ---- + extended_glob = global_extglob; + #endif ++ if (parser_state & (PST_CMDSUBST|PST_STRING)) ++ expand_aliases = expaliases_flag; + + parser_state = 0; +*************** +*** 6700,6703 **** +--- 6702,6706 ---- + parser_state |= PST_NOERROR; + ++ parser_state |= PST_STRING; + expand_aliases = 0; + +*************** +*** 8713,8717 **** + parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */ + /* State flags we want to set for this run through the tokenizer. */ +! parser_state |= PST_COMPASSIGN|PST_REPARSE; + } + +--- 8716,8720 ---- + parser_state &= ~PST_NOEXPAND; /* parse_comsub sentinel */ + /* State flags we want to set for this run through the tokenizer. */ +! parser_state |= PST_COMPASSIGN|PST_REPARSE|PST_STRING; + } + +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-007.patch b/system/base/bash/files/official/bash52-007.patch new file mode 100644 index 00000000..152776f4 --- /dev/null +++ b/system/base/bash/files/official/bash52-007.patch @@ -0,0 +1,262 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-007 + +Bug-Reported-by: Bruce Jerrick +Bug-Reference-ID: +Bug-Reference-URL: https://bugzilla.redhat.com/show_bug.cgi?id=2134307 + +Bug-Description: + +This patch fixes several problems with alias expansion inside command +substitutions when in POSIX mode. + +Patch (apply with `patch -p0'): + +*** /fs1/chet/scratch/bash-5.2.6/parse.y 2022-11-02 10:36:54.000000000 -0400 +--- parse.y 2022-10-24 10:53:26.000000000 -0400 +*************** +*** 3613,3616 **** +--- 3614,3618 ---- + #define P_ARRAYSUB 0x0020 /* parsing a [...] array subscript for assignment */ + #define P_DOLBRACE 0x0040 /* parsing a ${...} construct */ ++ #define P_ARITH 0x0080 /* parsing a $(( )) arithmetic expansion */ + + /* Lexical state while parsing a grouping construct or $(...). */ +*************** +*** 3911,3914 **** +--- 3914,3920 ---- + else if ((flags & (P_ARRAYSUB|P_DOLBRACE)) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */ + goto parse_dollar_word; ++ else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '(') /*)*/ ++ /* $() inside $(( ))/$[ ] */ ++ goto parse_dollar_word; + #if defined (PROCESS_SUBSTITUTION) + /* XXX - technically this should only be recognized at the start of +*************** +*** 3941,3945 **** + nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + else if (ch == '[') /* ] */ +! nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags); + + CHECK_NESTRET_ERROR (); +--- 3947,3951 ---- + nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + else if (ch == '[') /* ] */ +! nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags|P_ARITH); + + CHECK_NESTRET_ERROR (); +*************** +*** 4080,4084 **** + shell_ungetc (peekc); + if (peekc == '(') /*)*/ +! return (parse_matched_pair (qc, open, close, lenp, 0)); + } + +--- 4086,4090 ---- + shell_ungetc (peekc); + if (peekc == '(') /*)*/ +! return (parse_matched_pair (qc, open, close, lenp, P_ARITH)); + } + +*************** +*** 4501,4505 **** + + exp_lineno = line_number; +! ttok = parse_matched_pair (0, '(', ')', &ttoklen, 0); + rval = 1; + if (ttok == &matched_pair_error) +--- 4512,4516 ---- + + exp_lineno = line_number; +! ttok = parse_matched_pair (0, '(', ')', &ttoklen, P_ARITH); + rval = 1; + if (ttok == &matched_pair_error) +*************** +*** 5016,5020 **** + } + else +! ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0); + if (ttok == &matched_pair_error) + return -1; /* Bail immediately. */ +--- 5030,5034 ---- + } + else +! ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARITH); + if (ttok == &matched_pair_error) + return -1; /* Bail immediately. */ +*** ../bash-5.2.6/y.tab.c 2022-11-02 10:36:54.000000000 -0400 +--- y.tab.c 2022-11-02 10:55:58.000000000 -0400 +*************** +*** 5924,5927 **** +--- 5924,5928 ---- + #define P_ARRAYSUB 0x0020 /* parsing a [...] array subscript for assignment */ + #define P_DOLBRACE 0x0040 /* parsing a ${...} construct */ ++ #define P_ARITH 0x0080 /* parsing a $(( )) arithmetic expansion */ + + /* Lexical state while parsing a grouping construct or $(...). */ +*************** +*** 6222,6225 **** +--- 6223,6229 ---- + else if ((flags & (P_ARRAYSUB|P_DOLBRACE)) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '[')) /* ) } ] */ + goto parse_dollar_word; ++ else if ((flags & P_ARITH) && (tflags & LEX_WASDOL) && ch == '(') /*)*/ ++ /* $() inside $(( ))/$[ ] */ ++ goto parse_dollar_word; + #if defined (PROCESS_SUBSTITUTION) + /* XXX - technically this should only be recognized at the start of +*************** +*** 6252,6256 **** + nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + else if (ch == '[') /* ] */ +! nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags); + + CHECK_NESTRET_ERROR (); +--- 6256,6260 ---- + nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags); + else if (ch == '[') /* ] */ +! nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags|P_ARITH); + + CHECK_NESTRET_ERROR (); +*************** +*** 6391,6395 **** + shell_ungetc (peekc); + if (peekc == '(') /*)*/ +! return (parse_matched_pair (qc, open, close, lenp, 0)); + } + +--- 6395,6399 ---- + shell_ungetc (peekc); + if (peekc == '(') /*)*/ +! return (parse_matched_pair (qc, open, close, lenp, P_ARITH)); + } + +*************** +*** 6812,6816 **** + + exp_lineno = line_number; +! ttok = parse_matched_pair (0, '(', ')', &ttoklen, 0); + rval = 1; + if (ttok == &matched_pair_error) +--- 6816,6820 ---- + + exp_lineno = line_number; +! ttok = parse_matched_pair (0, '(', ')', &ttoklen, P_ARITH); + rval = 1; + if (ttok == &matched_pair_error) +*************** +*** 7327,7331 **** + } + else +! ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0); + if (ttok == &matched_pair_error) + return -1; /* Bail immediately. */ +--- 7331,7335 ---- + } + else +! ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARITH); + if (ttok == &matched_pair_error) + return -1; /* Bail immediately. */ +*** /fs1/chet/scratch/bash-5.2.6/builtins/evalstring.c 2022-07-18 14:46:56.000000000 -0400 +--- builtins/evalstring.c 2022-10-18 10:57:51.000000000 -0400 +*************** +*** 432,435 **** +--- 432,437 ---- + if (parse_command () == 0) + { ++ int local_expalias, local_alflag; ++ + if ((flags & SEVAL_PARSEONLY) || (interactive_shell == 0 && read_but_dont_execute)) + { +*************** +*** 508,511 **** +--- 510,526 ---- + #endif /* ONESHOT */ + ++ /* We play tricks in the parser and command_substitute() turning ++ expand_aliases on and off depending on which parsing pass and ++ whether or not we're in posix mode. This only matters for ++ parsing, and we let the higher layers deal with that. We just ++ want to ensure that expand_aliases is set to the appropriate ++ global value when we go to execute this command, so we save ++ and restore it around the execution (we don't restore it if ++ the global value of the flag (expaliases_flag) changes). */ ++ local_expalias = expand_aliases; ++ local_alflag = expaliases_flag; ++ if (subshell_environment & SUBSHELL_COMSUB) ++ expand_aliases = expaliases_flag; ++ + /* See if this is a candidate for $( word : (char *)NULL; + if (tword) +--- 11306,11310 ---- + { + de_backslash (temp); +! tword = command_substitute (temp, quoted, PF_BACKQUOTE); + temp1 = tword ? tword->word : (char *)NULL; + if (tword) +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-008.patch b/system/base/bash/files/official/bash52-008.patch new file mode 100644 index 00000000..ff637114 --- /dev/null +++ b/system/base/bash/files/official/bash52-008.patch @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-008 + +Bug-Reported-by: Glenn Jackman +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00095.html + +Bug-Description: + +Array subscript expansion can inappropriately quote brackets if the expression +contains < or >. + +Patch (apply with `patch -p0'): + +*** ../bash-20221015/subst.c 2022-10-18 10:47:33.000000000 -0500 +--- subst.c 2022-10-20 11:41:07.000000000 -0500 +*************** +*** 3820,3823 **** +--- 3820,3827 ---- + #endif + ++ /* We don't perform process substitution in arithmetic expressions, so don't ++ bother checking for it. */ ++ #define ARITH_EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~') ++ + /* If there are any characters in STRING that require full expansion, + then call FUNC to expand STRING; otherwise just perform quote +*************** +*** 4029,4033 **** + while (string[i]) + { +! if (EXP_CHAR (string[i])) + break; + else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"') +--- 4033,4037 ---- + while (string[i]) + { +! if (ARITH_EXP_CHAR (string[i])) + break; + else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"') +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-009.patch b/system/base/bash/files/official/bash52-009.patch new file mode 100644 index 00000000..f907c8c4 --- /dev/null +++ b/system/base/bash/files/official/bash52-009.patch @@ -0,0 +1,43 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-009 + +Bug-Reported-by: Corey Hickey +Bug-Reference-ID: <134330ef-0ead-d73e-68eb-d58fc51efdba@fatooh.org> +Bug-Reference-URL: https://lists.gnu.org/archive/html/help-bash/2022-10/msg00025.html + +Bug-Description: + +Bash arithmetic expansion should allow `@' and `*' to be used as associative +array keys in expressions. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/expr.c 2022-07-11 10:03:34.000000000 -0400 +--- expr.c 2022-10-31 10:51:08.000000000 -0400 +*************** +*** 1169,1172 **** +--- 1169,1174 ---- + #if defined (ARRAY_VARS) + aflag = tflag; /* use a different variable for now */ ++ if (shell_compatibility_level > 51) ++ aflag |= AV_ATSTARKEYS; + v = (e == ']') ? array_variable_part (tok, tflag, (char **)0, (int *)0) : find_variable (tok); + #else +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-010.patch b/system/base/bash/files/official/bash52-010.patch new file mode 100644 index 00000000..b58f4a86 --- /dev/null +++ b/system/base/bash/files/official/bash52-010.patch @@ -0,0 +1,71 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-010 + +Bug-Reported-by: larsh@apache.org +Bug-Reference-ID: +Bug-Reference-URL: https://savannah.gnu.org/support/?110744 + +Bug-Description: + +Bash-5.2 checks the first 128 characters of an executable file that execve() +refuses to execute to see whether it's a binary file before trying to +execute it as a shell script. This defeats some previously-supported use +cases like "self-executing" jar files or "self-uncompressing" scripts. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/general.c 2022-11-07 10:31:42.000000000 -0500 +--- general.c 2022-11-18 14:48:45.000000000 -0500 +*************** +*** 684,687 **** +--- 684,688 ---- + { + register int i; ++ int nline; + unsigned char c; + +*************** +*** 690,702 **** + + /* Generally we check the first line for NULs. If the first line looks like +! a `#!' interpreter specifier, we just look for NULs anywhere in the +! buffer. */ +! if (sample[0] == '#' && sample[1] == '!') +! return (memchr (sample, '\0', sample_len) != NULL); + + for (i = 0; i < sample_len; i++) + { + c = sample[i]; +! if (c == '\n') + return (0); + if (c == '\0') +--- 691,701 ---- + + /* Generally we check the first line for NULs. If the first line looks like +! a `#!' interpreter specifier, we look for NULs in the first two lines. */ +! nline = (sample[0] == '#' && sample[1] == '!') ? 2 : 1; + + for (i = 0; i < sample_len; i++) + { + c = sample[i]; +! if (c == '\n' && --nline == 0) + return (0); + if (c == '\0') +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-011.patch b/system/base/bash/files/official/bash52-011.patch new file mode 100644 index 00000000..e65a50a2 --- /dev/null +++ b/system/base/bash/files/official/bash52-011.patch @@ -0,0 +1,45 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-011 + +Bug-Reported-by: Fabien Orjollet +Bug-Reference-ID: +Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1023776 + +Bug-Description: + +Patch (apply with `patch -p0'): + +Using timeouts and readline editing with the `read' builtin (read -e -t) can +leave the readline timeout enabled, potentially resulting in an erroneous +timeout on the next call. + +*** ../bash-5.2-patched/builtins/read.def 2022-06-02 14:23:19.000000000 -0400 +--- builtins/read.def 2022-11-10 10:27:45.000000000 -0500 +*************** +*** 168,171 **** +--- 168,174 ---- + if (read_timeout) + shtimer_clear (read_timeout); ++ #if defined (READLINE) ++ rl_clear_timeout (); ++ #endif + read_timeout = 0; + } +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-012.patch b/system/base/bash/files/official/bash52-012.patch new file mode 100644 index 00000000..2791542c --- /dev/null +++ b/system/base/bash/files/official/bash52-012.patch @@ -0,0 +1,344 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-012 + +Bug-Reported-by: Kerin Millar +Bug-Reference-ID: <20221002095107.89561bc811e549b55644df11@plushkava.net> +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00001.html + +Bug-Description: + +When running in bash compatibility mode, nested command substitutions can +leave the `extglob' option enabled. + +Patch (apply with `patch -p0'): + +*** /fs1/chet/scratch/bash-5.2.12/builtins/shopt.def 2022-11-07 10:31:42.000000000 -0500 +--- builtins/shopt.def 2022-10-14 09:30:11.000000000 -0400 +*************** +*** 150,153 **** +--- 150,158 ---- + #endif + ++ #if defined (EXTENDED_GLOB) ++ int extglob_flag = EXTGLOB_DEFAULT; ++ static int shopt_set_extglob PARAMS((char *, int)); ++ #endif ++ + int expaliases_flag = 0; + static int shopt_set_expaliases PARAMS((char *, int)); +*************** +*** 207,211 **** + #endif + #if defined (EXTENDED_GLOB) +! { "extglob", &extended_glob, (shopt_set_func_t *)NULL }, + #endif + { "extquote", &extended_quote, (shopt_set_func_t *)NULL }, +--- 212,216 ---- + #endif + #if defined (EXTENDED_GLOB) +! { "extglob", &extglob_flag, shopt_set_extglob }, + #endif + { "extquote", &extended_quote, (shopt_set_func_t *)NULL }, +*************** +*** 378,382 **** + + #if defined (EXTENDED_GLOB) +! extended_glob = EXTGLOB_DEFAULT; + #endif + +--- 383,387 ---- + + #if defined (EXTENDED_GLOB) +! extended_glob = extglob_flag = EXTGLOB_DEFAULT; + #endif + +*************** +*** 644,647 **** +--- 649,663 ---- + } + ++ #if defined (EXTENDED_GLOB) ++ static int ++ shopt_set_extglob (option_name, mode) ++ char *option_name; ++ int mode; ++ { ++ extended_glob = extglob_flag; ++ return 0; ++ } ++ #endif ++ + #if defined (READLINE) + static int +*** /fs1/chet/scratch/bash-5.2.12/builtins/common.h 2022-11-07 10:31:42.000000000 -0500 +--- builtins/common.h 2022-10-14 09:29:25.000000000 -0400 +*************** +*** 258,261 **** +--- 258,265 ---- + #endif + ++ #if defined (EXTENDED_GLOB) ++ extern int extglob_flag; ++ #endif ++ + extern int expaliases_flag; + +*** /fs1/chet/scratch/bash-5.2.12/execute_cmd.c 2022-11-07 10:31:42.000000000 -0500 +--- execute_cmd.c 2022-11-02 16:32:12.000000000 -0400 +*************** +*** 3991,4001 **** + #endif /* COND_REGEXP */ + { +- int oe; +- oe = extended_glob; + extended_glob = 1; + result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE) + ? EXECUTION_SUCCESS + : EXECUTION_FAILURE; +! extended_glob = oe; + } + if (arg1 != nullstr) +--- 4015,4023 ---- + #endif /* COND_REGEXP */ + { + extended_glob = 1; + result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE) + ? EXECUTION_SUCCESS + : EXECUTION_FAILURE; +! extended_glob = extglob_flag; + } + if (arg1 != nullstr) +*** /fs1/chet/scratch/bash-5.2.9/parse.y 2022-11-07 10:31:47.000000000 -0500 +--- parse.y 2022-11-14 11:27:22.000000000 -0500 +*************** +*** 126,130 **** + + #if defined (EXTENDED_GLOB) +! extern int extended_glob; + #endif + +--- 126,130 ---- + + #if defined (EXTENDED_GLOB) +! extern int extended_glob, extglob_flag; + #endif + +*************** +*** 3305,3309 **** + /* Reset to global value of extended glob */ + if (parser_state & (PST_EXTPAT|PST_CMDSUBST)) +! extended_glob = global_extglob; + #endif + if (parser_state & (PST_CMDSUBST|PST_STRING)) +--- 3321,3325 ---- + /* Reset to global value of extended glob */ + if (parser_state & (PST_EXTPAT|PST_CMDSUBST)) +! extended_glob = extglob_flag; + #endif + if (parser_state & (PST_CMDSUBST|PST_STRING)) +*************** +*** 4125,4132 **** + #if defined (EXTENDED_GLOB) + /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a +! conditional command and have already set global_extglob appropriately. */ + if (shell_compatibility_level <= 51 && was_extpat == 0) + { +! local_extglob = global_extglob = extended_glob; + extended_glob = 1; + } +--- 4143,4150 ---- + #if defined (EXTENDED_GLOB) + /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a +! conditional command and have already set extended_glob appropriately. */ + if (shell_compatibility_level <= 51 && was_extpat == 0) + { +! local_extglob = extended_glob; + extended_glob = 1; + } +*************** +*** 4236,4240 **** + sh_parser_state_t ps; + sh_input_line_state_t ls; +! int orig_ind, nc, sflags, start_lineno; + char *ret, *ep, *ostring; + +--- 4256,4260 ---- + sh_parser_state_t ps; + sh_input_line_state_t ls; +! int orig_ind, nc, sflags, start_lineno, local_extglob; + char *ret, *ep, *ostring; + +*************** +*** 4279,4283 **** + expand_aliases = 0; + #if defined (EXTENDED_GLOB) +! global_extglob = extended_glob; /* for reset_parser() */ + #endif + +--- 4299,4303 ---- + expand_aliases = 0; + #if defined (EXTENDED_GLOB) +! local_extglob = extended_glob; + #endif + +*************** +*** 4297,4300 **** +--- 4317,4323 ---- + restore_parser_state (&ps); + ++ #if defined (EXTENDED_GLOB) ++ extended_glob = local_extglob; ++ #endif + token_to_read = 0; + +*************** +*** 4732,4741 **** +--- 4755,4768 ---- + + /* rhs */ ++ #if defined (EXTENDED_GLOB) + local_extglob = extended_glob; + if (parser_state & PST_EXTPAT) + extended_glob = 1; ++ #endif + tok = read_token (READ); ++ #if defined (EXTENDED_GLOB) + if (parser_state & PST_EXTPAT) + extended_glob = local_extglob; ++ #endif + parser_state &= ~(PST_REGEXP|PST_EXTPAT); + +*************** +*** 4784,4788 **** + COND_COM *cexp; + +- global_extglob = extended_glob; + cexp = cond_expr (); + return (make_cond_command (cexp)); +--- 4811,4814 ---- +*** y.tab.c.save 2022-11-07 10:31:47.000000000 -0500 +--- y.tab.c 2022-11-18 15:58:03.000000000 -0500 +*************** +*** 176,180 **** + + #if defined (EXTENDED_GLOB) +! extern int extended_glob; + #endif + +--- 176,180 ---- + + #if defined (EXTENDED_GLOB) +! extern int extended_glob, extglob_flag; + #endif + +*************** +*** 5616,5620 **** + /* Reset to global value of extended glob */ + if (parser_state & (PST_EXTPAT|PST_CMDSUBST)) +! extended_glob = global_extglob; + #endif + if (parser_state & (PST_CMDSUBST|PST_STRING)) +--- 5616,5620 ---- + /* Reset to global value of extended glob */ + if (parser_state & (PST_EXTPAT|PST_CMDSUBST)) +! extended_glob = extglob_flag; + #endif + if (parser_state & (PST_CMDSUBST|PST_STRING)) +*************** +*** 6436,6443 **** + #if defined (EXTENDED_GLOB) + /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a +! conditional command and have already set global_extglob appropriately. */ + if (shell_compatibility_level <= 51 && was_extpat == 0) + { +! local_extglob = global_extglob = extended_glob; + extended_glob = 1; + } +--- 6436,6443 ---- + #if defined (EXTENDED_GLOB) + /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a +! conditional command and have already set extended_glob appropriately. */ + if (shell_compatibility_level <= 51 && was_extpat == 0) + { +! local_extglob = extended_glob; + extended_glob = 1; + } +*************** +*** 6547,6551 **** + sh_parser_state_t ps; + sh_input_line_state_t ls; +! int orig_ind, nc, sflags, start_lineno; + char *ret, *ep, *ostring; + +--- 6547,6551 ---- + sh_parser_state_t ps; + sh_input_line_state_t ls; +! int orig_ind, nc, sflags, start_lineno, local_extglob; + char *ret, *ep, *ostring; + +*************** +*** 6590,6594 **** + expand_aliases = 0; + #if defined (EXTENDED_GLOB) +! global_extglob = extended_glob; /* for reset_parser() */ + #endif + +--- 6590,6594 ---- + expand_aliases = 0; + #if defined (EXTENDED_GLOB) +! local_extglob = extended_glob; + #endif + +*************** +*** 6608,6611 **** +--- 6608,6614 ---- + restore_parser_state (&ps); + ++ #if defined (EXTENDED_GLOB) ++ extended_glob = local_extglob; ++ #endif + token_to_read = 0; + +*************** +*** 7043,7052 **** +--- 7046,7059 ---- + + /* rhs */ ++ #if defined (EXTENDED_GLOB) + local_extglob = extended_glob; + if (parser_state & PST_EXTPAT) + extended_glob = 1; ++ #endif + tok = read_token (READ); ++ #if defined (EXTENDED_GLOB) + if (parser_state & PST_EXTPAT) + extended_glob = local_extglob; ++ #endif + parser_state &= ~(PST_REGEXP|PST_EXTPAT); + +*************** +*** 7095,7099 **** + COND_COM *cexp; + +- global_extglob = extended_glob; + cexp = cond_expr (); + return (make_cond_command (cexp)); +--- 7102,7105 ---- +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-013.patch b/system/base/bash/files/official/bash52-013.patch new file mode 100644 index 00000000..3051269c --- /dev/null +++ b/system/base/bash/files/official/bash52-013.patch @@ -0,0 +1,58 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-013 + +Bug-Reported-by: Ralf Oehler +Bug-Reference-ID: <20221120140252.2fc6489b@bilbo> +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00082.html + +Bug-Description: + +Bash can leak memory when referencing a non-existent associative array +element. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/subst.c 2022-11-05 17:27:48.000000000 -0400 +--- subst.c 2022-11-21 14:42:59.000000000 -0500 +*************** +*** 7498,7503 **** + : quote_escapes (temp); + rflags |= W_ARRAYIND; +- if (estatep) +- *estatep = es; /* structure copy */ + } + /* Note that array[*] and array[@] expanded to a quoted null string by +--- 7508,7511 ---- +*************** +*** 7508,7512 **** + rflags |= W_HASQUOTEDNULL; + +! if (estatep == 0) + flush_eltstate (&es); + } +--- 7516,7522 ---- + rflags |= W_HASQUOTEDNULL; + +! if (estatep) +! *estatep = es; /* structure copy */ +! else + flush_eltstate (&es); + } +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-014.patch b/system/base/bash/files/official/bash52-014.patch new file mode 100644 index 00000000..c6f3176b --- /dev/null +++ b/system/base/bash/files/official/bash52-014.patch @@ -0,0 +1,119 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-014 + +Bug-Reported-by: Andreas Schwab +Bug-Reference-ID: +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00076.html + +Bug-Description: + +Bash defers processing additional terminating signals when running the +EXIT trap while exiting due to a terminating signal. This patch allows the +new terminating signal to kill the shell immediately. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/execute_cmd.c 2022-11-23 17:09:18.000000000 -0500 +--- execute_cmd.c 2022-11-28 10:36:08.000000000 -0500 +*************** +*** 3625,3628 **** +--- 3649,3653 ---- + + dispose_words (es); ++ QUIT; + + if (match) +*** ../bash-5.2-patched/sig.c 2021-11-04 14:15:31.000000000 -0400 +--- sig.c 2022-12-06 09:45:11.000000000 -0500 +*************** +*** 95,98 **** +--- 95,99 ---- + + static void initialize_shell_signals PARAMS((void)); ++ static void kill_shell PARAMS((int)); + + void +*************** +*** 487,490 **** +--- 495,500 ---- + } + ++ static int handling_termsig = 0; ++ + sighandler + termsig_sighandler (sig) +*************** +*** 533,536 **** +--- 543,554 ---- + terminate_immediately = 1; + ++ /* If we are currently handling a terminating signal, we have a couple of ++ choices here. We can ignore this second terminating signal and let the ++ shell exit from the first one, or we can exit immediately by killing ++ the shell with this signal. This code implements the latter; to implement ++ the former, replace the kill_shell(sig) with return. */ ++ if (handling_termsig) ++ kill_shell (sig); /* just short-circuit now */ ++ + terminating_signal = sig; + +*************** +*** 565,572 **** + int sig; + { +- static int handling_termsig = 0; +- int i, core; +- sigset_t mask; +- + /* Simple semaphore to keep this function from being executed multiple + times. Since we no longer are running as a signal handler, we don't +--- 585,588 ---- +*************** +*** 574,578 **** + if (handling_termsig) + return; +! handling_termsig = 1; + terminating_signal = 0; /* keep macro from re-testing true. */ + +--- 590,595 ---- + if (handling_termsig) + return; +! +! handling_termsig = terminating_signal; /* for termsig_sighandler */ + terminating_signal = 0; /* keep macro from re-testing true. */ + +*************** +*** 614,617 **** +--- 631,644 ---- + run_exit_trap (); /* XXX - run exit trap possibly in signal context? */ + ++ kill_shell (sig); ++ } ++ ++ static void ++ kill_shell (sig) ++ int sig; ++ { ++ int i, core; ++ sigset_t mask; ++ + /* We don't change the set of blocked signals. If a user starts the shell + with a terminating signal blocked, we won't get here (and if by some +*** ../bash-5.2/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 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/system/base/bash/files/official/bash52-015.patch b/system/base/bash/files/official/bash52-015.patch new file mode 100644 index 00000000..740a13da --- /dev/null +++ b/system/base/bash/files/official/bash52-015.patch @@ -0,0 +1,216 @@ + BASH PATCH REPORT + ================= + +Bash-Release: 5.2 +Patch-ID: bash52-015 + +Bug-Reported-by: Frode Nordahl +Bug-Reference-ID: <20221119070714.351759-1-frode.nordahl@canonical.com> +Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00078.html + +Bug-Description: + +There are several cases where bash is too aggressive when optimizing out forks +in subshells. For example, `eval' and traps should never be optimized. + +Patch (apply with `patch -p0'): + +*** ../bash-5.2-patched/builtins/common.h 2022-11-23 17:09:18.000000000 -0500 +--- builtins/common.h 2022-11-19 18:03:59.000000000 -0500 +*************** +*** 52,55 **** +--- 52,56 ---- + #define SEVAL_ONECMD 0x100 /* only allow a single command */ + #define SEVAL_NOHISTEXP 0x200 /* inhibit history expansion */ ++ #define SEVAL_NOOPTIMIZE 0x400 /* don't try to set optimization flags */ + + /* Flags for describe_command, shared between type.def and command.def */ +*** ../bash-5.2-patched/builtins/evalstring.c 2022-11-05 17:27:44.000000000 -0400 +--- builtins/evalstring.c 2022-11-19 18:23:21.000000000 -0500 +*************** +*** 133,138 **** + (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') && + (command->value.Connection->second->flags & CMD_TRY_OPTIMIZING) && +! ((startup_state == 2 && should_suppress_fork (command->value.Connection->second)) || +! ((subshell_environment & SUBSHELL_PAREN) && should_optimize_fork (command->value.Connection->second, 0)))) + { + command->value.Connection->second->flags |= CMD_NO_FORK; +--- 133,138 ---- + (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) || +! ((subshell_environment & SUBSHELL_PAREN) && should_optimize_fork (command->value.Connection->second, 0)))) + { + command->value.Connection->second->flags |= CMD_NO_FORK; +*************** +*** 291,294 **** +--- 291,295 ---- + (flags & SEVAL_RESETLINE) -> reset line_number to 1 + (flags & SEVAL_NOHISTEXP) -> history_expansion_inhibited -> 1 ++ (flags & SEVAL_NOOPTIMIZE) -> don't try to turn on optimizing flags + */ + +*************** +*** 503,507 **** + 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; +--- 504,510 ---- + series of connection commands is + command->value.Connection->second. */ +! else if (command->type == cm_connection && +! (flags & SEVAL_NOOPTIMIZE) == 0 && +! can_optimize_connection (command)) + { + command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING; +*** ../bash-5.2-patched/builtins/eval.def 2016-01-25 13:28:37.000000000 -0500 +--- builtins/eval.def 2022-11-19 18:04:25.000000000 -0500 +*************** +*** 54,57 **** + list = loptend; /* skip over possible `--' */ + +! return (list ? evalstring (string_list (list), "eval", SEVAL_NOHIST) : EXECUTION_SUCCESS); + } +--- 54,57 ---- + list = loptend; /* skip over possible `--' */ + +! return (list ? evalstring (string_list (list), "eval", SEVAL_NOHIST|SEVAL_NOOPTIMIZE) : EXECUTION_SUCCESS); + } +*** ../bash-5.2-patched/trap.c 2022-08-10 08:59:45.000000000 -0400 +--- trap.c 2022-12-12 10:57:51.000000000 -0500 +*************** +*** 305,308 **** +--- 305,309 ---- + volatile int save_return_catch_flag, function_code; + procenv_t save_return_catch; ++ char *trap_command, *old_trap; + #if defined (ARRAY_VARS) + ARRAY *ps; +*************** +*** 420,423 **** +--- 421,427 ---- + else + { ++ old_trap = trap_list[sig]; ++ trap_command = savestring (old_trap); ++ + save_parser_state (&pstate); + save_subst_varlist = subst_assign_varlist; +*************** +*** 442,446 **** + + if (function_code == 0) +! x = parse_and_execute (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE); + else + { +--- 446,451 ---- + + if (function_code == 0) +! /* XXX is x always last_command_exit_value? */ +! x = parse_and_execute (trap_command, "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE); + else + { +*************** +*** 1003,1007 **** + { + reset_parser (); +! parse_and_execute (trap_command, "exit trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE); + } + else if (code == ERREXIT) +--- 1008,1012 ---- + { + reset_parser (); +! parse_and_execute (trap_command, "exit trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE); + } + else if (code == ERREXIT) +*************** +*** 1110,1114 **** + } + +! flags = SEVAL_NONINT|SEVAL_NOHIST; + if (sig != DEBUG_TRAP && sig != RETURN_TRAP && sig != ERROR_TRAP) + flags |= SEVAL_RESETLINE; +--- 1115,1119 ---- + } + +! flags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE; + if (sig != DEBUG_TRAP && sig != RETURN_TRAP && sig != ERROR_TRAP) + flags |= SEVAL_RESETLINE; +*** ../bash-5.2-patched/parse.y 2022-11-23 17:09:18.000000000 -0500 +--- parse.y 2022-11-19 18:15:34.000000000 -0500 +*************** +*** 2828,2832 **** + last_lastarg = savestring (last_lastarg); + +! parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST); + + restore_parser_state (&ps); +--- 2844,2848 ---- + last_lastarg = savestring (last_lastarg); + +! parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE); + + restore_parser_state (&ps); +*** ../bash-5.2-patched/jobs.c 2022-07-18 10:19:56.000000000 -0400 +--- jobs.c 2022-11-19 18:10:24.000000000 -0500 +*************** +*** 4221,4225 **** + for (i = 0; i < nchild; i++) + { +! parse_and_execute (savestring (trap_command), "trap", SEVAL_NOHIST|SEVAL_RESETLINE); + } + +--- 4243,4247 ---- + for (i = 0; i < nchild; i++) + { +! parse_and_execute (savestring (trap_command), "trap", SEVAL_NOHIST|SEVAL_RESETLINE|SEVAL_NOOPTIMIZE); + } + +*** ../bash-5.2-patched/y.tab.c 2022-11-23 17:09:18.000000000 -0500 +--- y.tab.c 2022-11-23 17:21:17.000000000 -0500 +*************** +*** 5139,5143 **** + last_lastarg = savestring (last_lastarg); + +! parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST); + + restore_parser_state (&ps); +--- 5154,5158 ---- + last_lastarg = savestring (last_lastarg); + +! parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE); + + restore_parser_state (&ps); +*** ../bash-5.2-patched/execute_cmd.c 2022-11-05 17:27:41.000000000 -0400 +--- execute_cmd.c 2022-11-22 17:09:38.000000000 -0500 +*************** +*** 1655,1659 **** + and set CMD_TRY_OPTIMIZING for simple commands on the right side of an + and-or or `;' list to test for optimizing forks when they are executed. */ +! if (user_subshell && command->type == cm_subshell) + optimize_subshell_command (command->value.Subshell->command); + +--- 1665,1670 ---- + and set CMD_TRY_OPTIMIZING for simple commands on the right side of an + and-or or `;' list to test for optimizing forks when they are executed. */ +! if (user_subshell && command->type == cm_subshell && +! (command->flags & (CMD_TIME_PIPELINE|CMD_INVERT_RETURN)) == 0) + optimize_subshell_command (command->value.Subshell->command); + +*** ../bash-5.2/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 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/system/base/bash/pspec.xml b/system/base/bash/pspec.xml index 21ff142b..49910177 100755 --- a/system/base/bash/pspec.xml +++ b/system/base/bash/pspec.xml @@ -12,24 +12,31 @@ app:console The standard GNU Bourne again shell Bash is the GNU Project's Bourne Again SHell, a complete implementation of the IEEE POSIX and Open Group shell specification with interactive command line editing, csh-like features such as history substitution. - mirrors://gnu/bash/bash-5.1.16.tar.gz + mirrors://gnu/bash/bash-5.2.tar.gz ncurses-devel - + official/bash52-001.patch + official/bash52-002.patch + official/bash52-003.patch + official/bash52-004.patch + official/bash52-005.patch + official/bash52-006.patch + official/bash52-007.patch + official/bash52-008.patch + official/bash52-009.patch + official/bash52-010.patch + official/bash52-011.patch + official/bash52-012.patch + official/bash52-013.patch + official/bash52-014.patch + official/bash52-015.patch - fedora/bash-2.03-paths.patch + fedora/bash-2.03-profile.patch fedora/bash-2.05a-interpreter.patch fedora/bash-2.05b-debuginfo.patch @@ -47,7 +54,7 @@ fedora/bash-4.3-memleak-lc_all.patch fedora/bash-4.3-noecho.patch fedora/bash-4.4-no-loadable-builtins.patch - fedora/bash-infotags.patch + fedora/bash-5.0-syslog-history.patch fedora/bash-requires.patch fedora/bash-setlocale.patch fedora/bash-tty-tests.patch @@ -76,6 +83,13 @@ + + 2022-12-15 + 5.2.15 + Version bump. + Mustafa Cinasal + muscnsl@gmail.com + 2022-05-05 5.1.16