From 5f1700755f12677b608adef88c39e08df99c41f2 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 10 Nov 2016 10:37:27 +0000 Subject: 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. --- ChangeLog | 5 +++++ Src/exec.c | 4 ++++ Test/C03traps.ztst | 17 +++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/ChangeLog b/ChangeLog index d7dc2d0a4..a9c47878b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2016-11-10 Peter Stephenson + + * 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 * 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 '' +>hello + %clean rm -f TRAPEXIT -- cgit 1.4.1