diff options
author | Bart Schaefer <schaefer@zsh.org> | 2022-12-13 21:11:33 -0800 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2022-12-13 21:11:33 -0800 |
commit | 6d49734d46a66b572cf064f60dac8d9e0ad309d0 (patch) | |
tree | 16ec8ac27550c244ae75e1490a271e5b5dc3ea2e /Src | |
parent | 727079f7e547fe17e73fa6e240fe5c07ab01abe9 (diff) | |
download | zsh-6d49734d46a66b572cf064f60dac8d9e0ad309d0.tar.gz zsh-6d49734d46a66b572cf064f60dac8d9e0ad309d0.tar.xz zsh-6d49734d46a66b572cf064f60dac8d9e0ad309d0.zip |
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.
Diffstat (limited to 'Src')
-rw-r--r-- | Src/exec.c | 4 |
1 files changed, 4 insertions, 0 deletions
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(); |