diff options
author | Peter Stephenson <pws@zsh.org> | 2016-11-10 10:37:27 +0000 |
---|---|---|
committer | Peter Stephenson <pws@zsh.org> | 2016-11-10 10:37:27 +0000 |
commit | 5f1700755f12677b608adef88c39e08df99c41f2 (patch) | |
tree | c194e75d628380726e2649df40b70d41c6377beb | |
parent | 370b278565126a0abf3382ba10965e7a1090e7f8 (diff) | |
download | zsh-5f1700755f12677b608adef88c39e08df99c41f2.tar.gz zsh-5f1700755f12677b608adef88c39e08df99c41f2.tar.xz zsh-5f1700755f12677b608adef88c39e08df99c41f2.zip |
39901: No EXIT trap on LHS of pipeline.
There is a special case if the LHS is a shell construct. Add unit tests for both cases.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/exec.c | 4 | ||||
-rw-r--r-- | Test/C03traps.ztst | 17 |
3 files changed, 26 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index d7dc2d0a4..a9c47878b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2016-11-10 Peter Stephenson <p.stephenson@samsung.com> + + * 39901: Src/exec.c, Test/C03traps.ztst: Exiting the left hand + side of a pipeline shouldn't trigger EXIT trap. + 2016-11-09 Oliver Kiddle <opk@zsh.org> * 39890: Completion/Debian/Command/_git-buildpackage, diff --git a/Src/exec.c b/Src/exec.c index c0ed2c475..a01a633db 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1888,6 +1888,10 @@ execpline2(Estate state, wordcode pcode, entersubsh(((how & Z_ASYNC) ? ESUB_ASYNC : 0) | ESUB_PGRP | ESUB_KEEPTRAP); close(synch[1]); + if (sigtrapped[SIGEXIT]) + { + unsettrap(SIGEXIT); + } execcmd_exec(state, &eparams, input, pipes[1], how, 1); _exit(lastval); } diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index 828a3d10f..c3bedb06c 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -641,6 +641,23 @@ F:Must be tested with a top-level script rather than source or function >TERM >EXIT + # Should not get "hello" in the single quotes. + ( + trap "echo hello" EXIT; + { :; } | { read line; print "'$line'"; } + ) +0:EXIT trap not called in LHS of pipeline: Shell construct on LHS +>'' +>hello + + ( + trap "echo hello" EXIT; + cat </dev/null | { read line; print "'$line'"; } + ) +0:EXIT trap not called in LHS of pipeline: External command on LHS +>'' +>hello + %clean rm -f TRAPEXIT |