From: Chet Ramey Date: Wed, 3 Jun 2026 14:21:45 +0000 (-0400) Subject: Bash-5.3 patch 12: fix subshells inappropriately running the EXIT trap if they receiv... X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=thirdparty%2Fbash.git Bash-5.3 patch 12: fix subshells inappropriately running the EXIT trap if they receive a fatal signal before resetting traps --- diff --git a/execute_cmd.c b/execute_cmd.c index 070f5119..6a22395e 100644 --- a/execute_cmd.c +++ b/execute_cmd.c @@ -1643,13 +1643,13 @@ execute_in_subshell (COMMAND *command, int asynchronous, int pipe_in, int pipe_o if (user_subshell) { - subshell_environment = SUBSHELL_PAREN; /* XXX */ + subshell_environment = SUBSHELL_PAREN|SUBSHELL_IGNTRAP; /* XXX */ if (asynchronous) subshell_environment |= SUBSHELL_ASYNC; } else { - subshell_environment = 0; /* XXX */ + subshell_environment = SUBSHELL_IGNTRAP; /* XXX */ if (asynchronous) subshell_environment |= SUBSHELL_ASYNC; if (pipe_in != NO_PIPE || pipe_out != NO_PIPE) diff --git a/patchlevel.h b/patchlevel.h index 760e88cb..8020b323 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -25,6 +25,6 @@ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh looks for to find the patch level (for the sccs version string). */ -#define PATCHLEVEL 11 +#define PATCHLEVEL 12 #endif /* _PATCHLEVEL_H_ */ diff --git a/sig.c b/sig.c index 6de13259..d82027e2 100644 --- a/sig.c +++ b/sig.c @@ -638,7 +638,10 @@ termsig_handler (int sig) interrupt_execution = retain_fifos = executing_funsub = 0; comsub_ignore_return = return_catch_flag = wait_intr_flag = 0; - run_exit_trap (); /* XXX - run exit trap possibly in signal context? */ + /* Don't run the exit trap if we're supposed to be ignoring traps in a + subshell environment. */ + if ((subshell_environment & SUBSHELL_IGNTRAP) == 0) + run_exit_trap (); /* XXX - run exit trap possibly in signal context? */ kill_shell (sig); }