diff options
author | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2020-02-02 18:05:47 +0000 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2020-02-02 18:05:47 +0000 |
commit | e01223a26cb7afd9f44805f067c4dcdad06039b0 (patch) | |
tree | 55aa836496b6d616fad10e2bfa1015367799de84 | |
parent | 7a9467e430eb331d28065a21c6427714634eeaa5 (diff) | |
download | zsh-e01223a26cb7afd9f44805f067c4dcdad06039b0.tar.gz zsh-e01223a26cb7afd9f44805f067c4dcdad06039b0.tar.xz zsh-e01223a26cb7afd9f44805f067c4dcdad06039b0.zip |
45373: Fix ERR_EXIT bug in else branch of if.
The flags need resetting for this branch otherwise e.g. command substitution with non-zero status doesn't cause exit.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/loop.c | 2 | ||||
-rw-r--r-- | Test/C03traps.ztst | 9 |
3 files changed, 15 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index d4dbb2e12..663b3e88f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2020-02-02 Peter Stephenson <p.w.stephenson@ntlworld.com> + + * 45373: Src/loop.c, Test/C03traps.ztst: ERR_EXIT failed on + command substitution in else branch. + 2020-02-02 Daniel Shahaf <danielsh@apache.org> * 45372: Etc/BUGS: Record a symlink loop bug involving :P diff --git a/Src/loop.c b/Src/loop.c index 538afb8dc..01abc6cc9 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -570,7 +570,7 @@ execif(Estate state, int do_exec) if (run) { /* we need to ignore lastval until we reach execcmd() */ - if (olderrexit) + if (olderrexit || run == 2) noerrexit = olderrexit; else if (lastval) noerrexit |= NOERREXIT_EXIT | NOERREXIT_RETURN | NOERREXIT_UNTIL_EXEC; diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index e661aabd5..6f84e5db2 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -500,6 +500,15 @@ >Succeed 2 >Succeed 3 + (set -e + if false; then + else + a=$(false) + print This should not appear + fi + ) +1:ERREXIT is triggered in an else block after a cmd subst returning false + fn() { emulate -L zsh setopt errreturn |