diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/exec.c | 2 | ||||
-rw-r--r-- | Test/C03traps.ztst | 35 |
3 files changed, 41 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 39042f8e0..307a02b86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-08-27 Peter Stephenson <p.w.stephenson@ntlworld.com> + + * 41608 (plus tests): Src/exec.c, Test/C03traps.ztst: ERR_EXIT + behaviour restored when executing a function in body of else. + 2017-08-29 Андрей Стоцкий (_RuRo_) <ruro.ruro@ya.ru> * 41618: Completion/Unix/Command/_todo.sh: Added some arguments diff --git a/Src/exec.c b/Src/exec.c index cd99733f1..76a6bb1a4 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -3025,7 +3025,7 @@ execcmd_exec(Estate state, Execcmd_params eparams, preargs = NULL; /* if we get this far, it is OK to pay attention to lastval again */ - if ((noerrexit & NOERREXIT_UNTIL_EXEC) && !is_shfunc) + if (noerrexit & NOERREXIT_UNTIL_EXEC) noerrexit = 0; /* Do prefork substitutions. diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index 759401225..f8a12319a 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -465,6 +465,41 @@ ) 1:ERREXIT in loop with simple commands + (set -e + f() + { + false && false + } + if false; then + : + else + # ERR_EXIT should trigger on return from function, not in function. + f + echo Fail 1 + echo Fail 2 + f + echo Fail 3 + fi) +1:ERREXIT with false from inside && within function + + (set -e + f() + { + } + if false; then + : + else + f + echo Succeed 1 + echo Succeed 2 + f + echo Succeed 3 + fi) +0:ERREXIT not triggered on empty function after false in if. +>Succeed 1 +>Succeed 2 +>Succeed 3 + fn() { emulate -L zsh setopt errreturn |