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 | |
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.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/exec.c | 4 |
2 files changed, 7 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index cea087a01..3536d0b1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2022-12-13 Bart Schaefer <schaefer@zsh.org> + * 51210: Src/exec.c: Clear errflag before calling EXIT trap, + otherwise the trap is skipped for special-case errors in builtins + * Philippe Altherr: 51198: Doc/Zsh/options.yo: Clarify and expand ERR_EXIT and ERR_RETURN documentation to include updated behavior 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(); |