summaryrefslogtreecommitdiffstats
path: root/source/a/bash
diff options
context:
space:
mode:
Diffstat (limited to 'source/a/bash')
-rw-r--r--source/a/bash/bash-5.2-patches/bash52-00389
-rw-r--r--source/a/bash/bash-5.2-patches/bash52-00470
-rw-r--r--source/a/bash/bash-5.2-patches/bash52-00547
-rw-r--r--source/a/bash/bash-5.2-patches/bash52-006293
-rw-r--r--source/a/bash/bash-5.2-patches/bash52-007262
-rw-r--r--source/a/bash/bash-5.2-patches/bash52-00858
-rw-r--r--source/a/bash/bash-5.2-patches/bash52-00943
7 files changed, 862 insertions, 0 deletions
diff --git a/source/a/bash/bash-5.2-patches/bash52-003 b/source/a/bash/bash-5.2-patches/bash52-003
new file mode 100644
index 000000000..b2dc4cbcc
--- /dev/null
+++ b/source/a/bash/bash-5.2-patches/bash52-003
@@ -0,0 +1,89 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.2
+Patch-ID: bash52-003
+
+Bug-Reported-by: D630 <d630@posteo.net>
+Bug-Reference-ID: <cf8523d58ac75b9ffba9519faa175618@posteo.de>
+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/source/a/bash/bash-5.2-patches/bash52-004 b/source/a/bash/bash-5.2-patches/bash52-004
new file mode 100644
index 000000000..d0834c19c
--- /dev/null
+++ b/source/a/bash/bash-5.2-patches/bash52-004
@@ -0,0 +1,70 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.2
+Patch-ID: bash52-004
+
+Bug-Reported-by: Antoine <bug-bash@glitchimini.net>
+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/source/a/bash/bash-5.2-patches/bash52-005 b/source/a/bash/bash-5.2-patches/bash52-005
new file mode 100644
index 000000000..3f6a85215
--- /dev/null
+++ b/source/a/bash/bash-5.2-patches/bash52-005
@@ -0,0 +1,47 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.2
+Patch-ID: bash52-005
+
+Bug-Reported-by: Justin Wood (Callek) <callek@gmail.com>
+Bug-Reference-ID: <CANBDKY9fp2yiXONP7RY4kNuRteuovUebxSJaqePHeu7cyaFS9Q@mail.gmail.com>
+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/source/a/bash/bash-5.2-patches/bash52-006 b/source/a/bash/bash-5.2-patches/bash52-006
new file mode 100644
index 000000000..851cfd7b6
--- /dev/null
+++ b/source/a/bash/bash-5.2-patches/bash52-006
@@ -0,0 +1,293 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.2
+Patch-ID: bash52-006
+
+Bug-Reported-by: feng xiangjun <fengxj325@gmail.com>
+Bug-Reference-ID: <CAHH2t87LrCmO=gdyWOmGn5WJt7EucL+iOXzrry34OETe50S6uA@mail.gmail.com>
+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/source/a/bash/bash-5.2-patches/bash52-007 b/source/a/bash/bash-5.2-patches/bash52-007
new file mode 100644
index 000000000..152776f4b
--- /dev/null
+++ b/source/a/bash/bash-5.2-patches/bash52-007
@@ -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 $( <file ). */
+ if (startup_state == 2 &&
+***************
+*** 525,528 ****
+--- 540,547 ----
+ discard_unwind_frame ("pe_dispose");
+
++ /* If the global value didn't change, we restore what we had. */
++ if ((subshell_environment & SUBSHELL_COMSUB) && local_alflag == expaliases_flag)
++ expand_aliases = local_expalias;
++
+ if (flags & SEVAL_ONECMD)
+ {
+*** /fs1/chet/scratch/bash-5.2.6/command.h 2021-04-30 15:43:15.000000000 -0400
+--- command.h 2022-10-18 11:44:31.000000000 -0400
+***************
+*** 115,118 ****
+--- 115,119 ----
+ #define PF_EXPANDRHS 0x20 /* same as W_EXPANDRHS */
+ #define PF_ALLINDS 0x40 /* array, act as if [@] was supplied */
++ #define PF_BACKQUOTE 0x80 /* differentiate `` from $() for command_substitute */
+
+ /* Possible values for subshell_environment */
+*** /fs1/chet/scratch/bash-5.2.6/subst.c 2022-11-02 10:28:10.000000000 -0400
+--- subst.c 2022-10-20 12:41:07.000000000 -0400
+***************
+*** 7124,7129 ****
+
+ /* We want to expand aliases on this pass if we are not in posix mode
+! for backwards compatibility. */
+! if (expand_aliases)
+ expand_aliases = posixly_correct == 0;
+
+--- 7133,7142 ----
+
+ /* We want to expand aliases on this pass if we are not in posix mode
+! for backwards compatibility. parse_and_execute() takes care of
+! setting expand_aliases back to the global value when executing the
+! parsed string. We only do this for $(...) command substitution,
+! since that is what parse_comsub handles; `` comsubs are processed
+! using parse.y:parse_matched_pair(). */
+! if (expand_aliases && (flags & PF_BACKQUOTE) == 0)
+ expand_aliases = posixly_correct == 0;
+
+***************
+*** 11293,11297 ****
+ {
+ de_backslash (temp);
+! tword = command_substitute (temp, quoted, 0);
+ temp1 = tword ? tword->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/source/a/bash/bash-5.2-patches/bash52-008 b/source/a/bash/bash-5.2-patches/bash52-008
new file mode 100644
index 000000000..ff6371140
--- /dev/null
+++ b/source/a/bash/bash-5.2-patches/bash52-008
@@ -0,0 +1,58 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.2
+Patch-ID: bash52-008
+
+Bug-Reported-by: Glenn Jackman <glenn.jackman@gmail.com>
+Bug-Reference-ID: <CAFC8ewQDx7hzNJzveuJ5o4FWo=ij7MzckiJVN_6NXjp504QZeg@mail.gmail.com>
+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/source/a/bash/bash-5.2-patches/bash52-009 b/source/a/bash/bash-5.2-patches/bash52-009
new file mode 100644
index 000000000..f907c8c47
--- /dev/null
+++ b/source/a/bash/bash-5.2-patches/bash52-009
@@ -0,0 +1,43 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.2
+Patch-ID: bash52-009
+
+Bug-Reported-by: Corey Hickey <bugfood-ml@fatooh.org>
+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_ */