mirror of
git://slackware.nl/current.git
synced 2024-12-28 09:59:53 +01:00
f2ee5ebc09
a/bash-5.2.037-x86_64-1.txz: Upgraded. a/dracut-103-x86_64-3.txz: Rebuilt. Don't search for systemd services. Thanks to LuckyCyborg. d/git-2.46.2-x86_64-1.txz: Upgraded. kde/krita-5.2.5-x86_64-1.txz: Upgraded. l/gtk4-4.16.2-x86_64-1.txz: Upgraded. l/harfbuzz-10.0.0-x86_64-1.txz: Upgraded. n/netatalk-3.2.10-x86_64-1.txz: Upgraded. xap/mpv-0.39.0-x86_64-1.txz: Upgraded.
143 lines
4 KiB
Text
143 lines
4 KiB
Text
BASH PATCH REPORT
|
|
=================
|
|
|
|
Bash-Release: 5.2
|
|
Patch-ID: bash52-034
|
|
|
|
Bug-Reported-by: Wiley Young <wyeth2485@gmail.com>
|
|
Bug-Reference-ID: <CAGnujaPrPV9hgbvdtG=fOs+L1zVGEahT9d3Aw0e1y3Qj8D8stw@mail.gmail.com>
|
|
Bug-Reference-URL: https://lists.gnu.org/archive/html/bug-bash/2023-05/msg00146.html
|
|
|
|
Bug-Description:
|
|
|
|
If we parse a compound assignment during an alias expansion, it's possible
|
|
to have the current input string popped out from underneath the parse. In
|
|
this case, we should not restore the input we were using when we began to
|
|
parse the compound assignment.
|
|
|
|
Patch (apply with `patch -p0'):
|
|
|
|
*** ../bash-5.2-patched/parse.y Fri May 26 16:57:03 2023
|
|
--- parse.y Thu Jun 1 16:30:19 2023
|
|
***************
|
|
*** 6854,6860 ****
|
|
{
|
|
WORD_LIST *wl, *rl;
|
|
! int tok, orig_line_number, assignok;
|
|
sh_parser_state_t ps;
|
|
char *ret;
|
|
|
|
orig_line_number = line_number;
|
|
--- 6858,6865 ----
|
|
{
|
|
WORD_LIST *wl, *rl;
|
|
! int tok, orig_line_number, assignok, ea, restore_pushed_strings;
|
|
sh_parser_state_t ps;
|
|
char *ret;
|
|
+ STRING_SAVER *ss;
|
|
|
|
orig_line_number = line_number;
|
|
***************
|
|
*** 6879,6882 ****
|
|
--- 6884,6893 ----
|
|
esacs_needed_count = expecting_in_token = 0;
|
|
|
|
+ /* We're not pushing any new input here, we're reading from the current input
|
|
+ source. If that's an alias, we have to be prepared for the alias to get
|
|
+ popped out from underneath us. */
|
|
+ ss = (ea = expanding_alias ()) ? pushed_string_list : (STRING_SAVER *)NULL;
|
|
+ restore_pushed_strings = 0;
|
|
+
|
|
while ((tok = read_token (READ)) != ')')
|
|
{
|
|
***************
|
|
*** 6902,6906 ****
|
|
--- 6913,6926 ----
|
|
}
|
|
|
|
+ /* Check whether or not an alias got popped out from underneath us and
|
|
+ fix up after restore_parser_state. */
|
|
+ if (ea && ss && ss != pushed_string_list)
|
|
+ {
|
|
+ restore_pushed_strings = 1;
|
|
+ ss = pushed_string_list;
|
|
+ }
|
|
restore_parser_state (&ps);
|
|
+ if (restore_pushed_strings)
|
|
+ pushed_string_list = ss;
|
|
|
|
if (wl == &parse_string_error)
|
|
*** ../bash-5.2-patched/y.tab.c Mon Sep 23 10:02:46 2024
|
|
--- y.tab.c Mon Sep 23 10:02:49 2024
|
|
***************
|
|
*** 8804,8812 ****
|
|
int *retlenp;
|
|
{
|
|
WORD_LIST *wl, *rl;
|
|
! int tok, orig_line_number, assignok;
|
|
sh_parser_state_t ps;
|
|
char *ret;
|
|
|
|
orig_line_number = line_number;
|
|
save_parser_state (&ps);
|
|
--- 8804,8813 ----
|
|
int *retlenp;
|
|
{
|
|
WORD_LIST *wl, *rl;
|
|
! int tok, orig_line_number, assignok, ea, restore_pushed_strings;
|
|
sh_parser_state_t ps;
|
|
char *ret;
|
|
+ STRING_SAVER *ss;
|
|
|
|
orig_line_number = line_number;
|
|
save_parser_state (&ps);
|
|
***************
|
|
*** 8829,8834 ****
|
|
--- 8830,8841 ----
|
|
|
|
esacs_needed_count = expecting_in_token = 0;
|
|
|
|
+ /* We're not pushing any new input here, we're reading from the current input
|
|
+ source. If that's an alias, we have to be prepared for the alias to get
|
|
+ popped out from underneath us. */
|
|
+ ss = (ea = expanding_alias ()) ? pushed_string_list : (STRING_SAVER *)NULL;
|
|
+ restore_pushed_strings = 0;
|
|
+
|
|
while ((tok = read_token (READ)) != ')')
|
|
{
|
|
if (tok == '\n') /* Allow newlines in compound assignments */
|
|
***************
|
|
*** 8852,8858 ****
|
|
--- 8859,8874 ----
|
|
wl = make_word_list (yylval.word, wl);
|
|
}
|
|
|
|
+ /* Check whether or not an alias got popped out from underneath us and
|
|
+ fix up after restore_parser_state. */
|
|
+ if (ea && ss && ss != pushed_string_list)
|
|
+ {
|
|
+ restore_pushed_strings = 1;
|
|
+ ss = pushed_string_list;
|
|
+ }
|
|
restore_parser_state (&ps);
|
|
+ if (restore_pushed_strings)
|
|
+ pushed_string_list = ss;
|
|
|
|
if (wl == &parse_string_error)
|
|
{
|
|
|
|
*** ../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 33
|
|
|
|
#endif /* _PATCHLEVEL_H_ */
|
|
--- 26,30 ----
|
|
looks for to find the patch level (for the sccs version string). */
|
|
|
|
! #define PATCHLEVEL 34
|
|
|
|
#endif /* _PATCHLEVEL_H_ */
|