diff --git a/config/rootfiles/common/bash b/config/rootfiles/common/bash
index c28d3571a..f348b5366 100644
--- a/config/rootfiles/common/bash
+++ b/config/rootfiles/common/bash
@@ -21,6 +21,7 @@
 #usr/include/bash/conftypes.h
 #usr/include/bash/dispose_cmd.h
 #usr/include/bash/error.h
+#usr/include/bash/execute_cmd.h
 #usr/include/bash/externs.h
 #usr/include/bash/general.h
 #usr/include/bash/hashlib.h
@@ -62,13 +63,16 @@
 #usr/include/bash/y.tab.h
 #usr/lib/bash
 usr/lib/bash/Makefile.inc
+usr/lib/bash/Makefile.sample
 usr/lib/bash/accept
 usr/lib/bash/basename
 usr/lib/bash/csv
 usr/lib/bash/cut
 usr/lib/bash/dirname
+usr/lib/bash/dsv
 usr/lib/bash/fdflags
 usr/lib/bash/finfo
+usr/lib/bash/getconf
 usr/lib/bash/head
 usr/lib/bash/id
 usr/lib/bash/ln
@@ -88,6 +92,7 @@ usr/lib/bash/rmdir
 usr/lib/bash/seq
 usr/lib/bash/setpgid
 usr/lib/bash/sleep
+usr/lib/bash/stat
 usr/lib/bash/strftime
 usr/lib/bash/sync
 usr/lib/bash/tee
diff --git a/lfs/bash b/lfs/bash
index ec8939aed..14b20b986 100644
--- a/lfs/bash
+++ b/lfs/bash
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 5.1.16
+VER        = 5.2
 
 THISAPP    = bash-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -53,7 +53,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE)             = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = 0bc53b24d9b95cd85e45196510104acf6ac6c980f68aedcc83c8409ce6a4682e92736a9cbe089ed92d74590e28918d0bee0e67c8e0f994bd37e45fad83f5b48e
+$(DL_FILE)_BLAKE2 = 51b196e710794ebad8eac28c31c93eb99ac1a7db30919a13271e39e1cb66a0672f242df75fc7d71627ea873dfbce53ec35c0c56a71c5167143070a7811343fd9
 
 install : $(TARGET)
 
@@ -90,6 +90,11 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-4.0-paths-1.patch
 	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-4.0-profile-1.patch
 	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-3.2-ssh_source_bash.patch
+	
+	for i in $$(seq 1 9); do \
+	cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash52-$$(printf "%03d" "$${i}") || exit 1; \
+	done
+
 
 	cd $(DIR_APP) && ./configure --prefix=$(PREFIX) $(CONFIGURE_OPTIONS)
 	cd $(DIR_APP) && make $(MAKETUNING)
diff --git a/src/patches/bash/bash52-001 b/src/patches/bash/bash52-001
new file mode 100644
index 000000000..83776ec76
--- /dev/null
+++ b/src/patches/bash/bash52-001
@@ -0,0 +1,46 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	5.2
+Patch-ID:	bash52-001
+
+Bug-Reported-by:	Emanuele Torre <torreemanuele6@gmail.com>
+Bug-Reference-ID:	<CAA7hNqeR1eSdiGK8mjQSqJPo815JYoG-Ekz-5PrAJTEYy2e6hg@mail.gmail.com>
+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/src/patches/bash/bash52-002 b/src/patches/bash/bash52-002
new file mode 100644
index 000000000..18229c996
--- /dev/null
+++ b/src/patches/bash/bash52-002
@@ -0,0 +1,46 @@
+			     BASH PATCH REPORT
+			     =================
+
+Bash-Release:	5.2
+Patch-ID:	bash52-002
+
+Bug-Reported-by:	Kan-Ru Chen <koster@debian.org>
+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/src/patches/bash/bash52-003 b/src/patches/bash/bash52-003
new file mode 100644
index 000000000..b2dc4cbcc
--- /dev/null
+++ b/src/patches/bash/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/src/patches/bash/bash52-004 b/src/patches/bash/bash52-004
new file mode 100644
index 000000000..d0834c19c
--- /dev/null
+++ b/src/patches/bash/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/src/patches/bash/bash52-005 b/src/patches/bash/bash52-005
new file mode 100644
index 000000000..3f6a85215
--- /dev/null
+++ b/src/patches/bash/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/src/patches/bash/bash52-006 b/src/patches/bash/bash52-006
new file mode 100644
index 000000000..851cfd7b6
--- /dev/null
+++ b/src/patches/bash/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/src/patches/bash/bash52-007 b/src/patches/bash/bash52-007
new file mode 100644
index 000000000..152776f4b
--- /dev/null
+++ b/src/patches/bash/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/src/patches/bash/bash52-008 b/src/patches/bash/bash52-008
new file mode 100644
index 000000000..ff6371140
--- /dev/null
+++ b/src/patches/bash/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/src/patches/bash/bash52-009 b/src/patches/bash/bash52-009
new file mode 100644
index 000000000..f907c8c47
--- /dev/null
+++ b/src/patches/bash/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_ */
