diff options
| author | Sam James <sam@gentoo.org> | 2025-07-19 07:23:50 +0100 |
|---|---|---|
| committer | Sam James <sam@gentoo.org> | 2025-07-19 07:25:11 +0100 |
| commit | 13f99b290375495333323b9a91c615c01fbf334f (patch) | |
| tree | 5519a41453abe7fc67b50c477e12f04b5a8fffd1 /app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch | |
| parent | 85ae6ca6e0f56fc8762a84efaf0a47d7824e1076 (diff) | |
| download | gentoo-13f99b290375495333323b9a91c615c01fbf334f.tar.gz gentoo-13f99b290375495333323b9a91c615c01fbf334f.tar.bz2 gentoo-13f99b290375495333323b9a91c615c01fbf334f.zip | |
app-shells/bash: fix two issues in 5.3
* Fix sourcing files from /sys (which affects sys-kernel/ugrd)
I pulled this one out of a 'devel' push.
Note https://lists.gnu.org/archive/html/bug-readline/2025-07/msg00001.html wrt Chet not discouraging
such cherry-picking.
Thanks to zen_desu for confirming it fixes the ugrd issue too.
* Fix crash w/ empty PROMPT_COMMAND
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch')
| -rw-r--r-- | app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch b/app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch new file mode 100644 index 000000000000..848768655ec4 --- /dev/null +++ b/app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch @@ -0,0 +1,160 @@ +https://lists.gnu.org/archive/html/bug-bash/2025-07/msg00014.html +--- parse.y Thu Jun 12 12:36:06 2025 +--- parse.y Sun Jul 6 16:46:00 2025 +*************** +*** 3009,3023 **** + + void +! execute_variable_command (const char *command, const char *vname) + { + char *last_lastarg; + sh_parser_state_t ps; + +! save_parser_state (&ps); + last_lastarg = save_lastarg (); + + parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); + +! restore_parser_state (&ps); + bind_lastarg (last_lastarg); + FREE (last_lastarg); +--- 3009,3025 ---- + + void +! execute_variable_command (const char *command, const char *vname, int flags) + { + char *last_lastarg; + sh_parser_state_t ps; + +! if (flags) +! save_parser_state (&ps); + last_lastarg = save_lastarg (); + + parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); + +! if (flags) +! restore_parser_state (&ps); + bind_lastarg (last_lastarg); + FREE (last_lastarg); +--- eval.c Fri Mar 7 18:50:03 2025 +--- eval.c Sun Jul 6 16:49:18 2025 +*************** +*** 284,288 **** + /* Caller ensures that A has a non-zero number of elements */ + int +! execute_array_command (ARRAY *a, void *v) + { + char *tag; +--- 284,288 ---- + /* Caller ensures that A has a non-zero number of elements */ + int +! execute_array_command (ARRAY *a, void *v, int flags) + { + char *tag; +*************** +*** 296,300 **** + { + if (argv[i] && argv[i][0]) +! execute_variable_command (argv[i], tag); + } + strvec_dispose (argv); +--- 296,300 ---- + { + if (argv[i] && argv[i][0]) +! execute_variable_command (argv[i], tag, flags); + } + strvec_dispose (argv); +*************** +*** 319,323 **** + { + if ((pcmds = array_cell (pcv)) && array_num_elements (pcmds) > 0) +! execute_array_command (pcmds, "PROMPT_COMMAND"); + return; + } +--- 319,323 ---- + { + if ((pcmds = array_cell (pcv)) && array_num_elements (pcmds) > 0) +! execute_array_command (pcmds, "PROMPT_COMMAND", 0); + return; + } +*************** +*** 328,332 **** + command_to_execute = value_cell (pcv); + if (command_to_execute && *command_to_execute) +! execute_variable_command (command_to_execute, "PROMPT_COMMAND"); + } + +--- 328,332 ---- + command_to_execute = value_cell (pcv); + if (command_to_execute && *command_to_execute) +! execute_variable_command (command_to_execute, "PROMPT_COMMAND", 0); + } + +--- input.h Fri Mar 10 16:22:48 2023 +--- input.h Sun Jul 6 16:45:42 2025 +*************** +*** 100,104 **** + extern int find_reserved_word (const char *); + extern void gather_here_documents (void); +! extern void execute_variable_command (const char *, const char *); + + extern int *save_token_state (void); +--- 100,104 ---- + extern int find_reserved_word (const char *); + extern void gather_here_documents (void); +! extern void execute_variable_command (const char *, const char *, int); + + extern int *save_token_state (void); +--- array.h Wed Dec 28 14:00:47 2022 +--- array.h Sun Jul 6 16:47:27 2025 +*************** +*** 178,182 **** + + /* In eval.c, but uses ARRAY * */ +! extern int execute_array_command (ARRAY *, void *); + + #endif /* _ARRAY_H_ */ +--- 178,182 ---- + + /* In eval.c, but uses ARRAY * */ +! extern int execute_array_command (ARRAY *, void *, int); + + #endif /* _ARRAY_H_ */ +--- y.tab.c Mon Jun 30 09:56:25 2025 +--- y.tab.c Sun Jul 6 17:38:06 2025 +*************** +*** 5368,5382 **** + + void +! execute_variable_command (const char *command, const char *vname) + { + char *last_lastarg; + sh_parser_state_t ps; + +! save_parser_state (&ps); + last_lastarg = save_lastarg (); + + parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); + +! restore_parser_state (&ps); + bind_lastarg (last_lastarg); + FREE (last_lastarg); +--- 5368,5384 ---- + + void +! execute_variable_command (const char *command, const char *vname, int flags) + { + char *last_lastarg; + sh_parser_state_t ps; + +! if (flags) +! save_parser_state (&ps); + last_lastarg = save_lastarg (); + + parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY); + +! if (flags) +! restore_parser_state (&ps); + bind_lastarg (last_lastarg); + FREE (last_lastarg); + |
