From 6d49734d46a66b572cf064f60dac8d9e0ad309d0 Mon Sep 17 00:00:00 2001 From: Bart Schaefer Date: Tue, 13 Dec 2022 21:11:33 -0800 Subject: 51210: Clear errflag before calling EXIT trap If this is not done, special cases such as failures in special builtins or errors in math expressions skip the trap execution. --- Src/exec.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Src/exec.c') diff --git a/Src/exec.c b/Src/exec.c index 7001fd615..2b7e0c7c5 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1598,6 +1598,7 @@ sublist_done: (isset(ERRRETURN) && !errreturn)) && !(noerrexit & NOERREXIT_EXIT); if (errexit) { + errflag = 0; if (sigtrapped[SIGEXIT]) dotrap(SIGEXIT); if (mypid != getpid()) @@ -1630,9 +1631,12 @@ sublist_done: thisjob = cj; if (exiting && sigtrapped[SIGEXIT]) { + int eflag = errflag; + errflag = 0; /* Clear the context for trap */ dotrap(SIGEXIT); /* Make sure this doesn't get executed again. */ sigtrapped[SIGEXIT] = 0; + errflag = eflag; } unqueue_signals(); -- cgit 1.4.1