mirror of
https://anongit.gentoo.org/git/repo/gentoo.git
synced 2025-07-21 22:53:31 +02:00
* 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>
160 lines
4.3 KiB
Diff
160 lines
4.3 KiB
Diff
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);
|
|
|