diff --git a/ChangeLog b/ChangeLog index 3018706b8..76a8091e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2022-11-08 Bart Schaefer + + * 50897: Src/exec.c, Src/loop.c: nonzero status of complex + commands should trigger ERR_EXIT + 2022-11-08 Peter Stephenson * users/28338: Src/lex.c, Test/D08cmdsubst.ztst: edge case of an diff --git a/Src/exec.c b/Src/exec.c index c8bcf4ee5..2422dae91 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -451,7 +451,7 @@ execcursh(Estate state, int do_exec) cmdpop(); state->pc = end; - this_noerrexit = 1; + this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END); return lastval; } diff --git a/Src/loop.c b/Src/loop.c index db5b3e097..be5261369 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -208,7 +208,7 @@ execfor(Estate state, int do_exec) loops--; simple_pline = old_simple_pline; state->pc = end; - this_noerrexit = 1; + this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END); return lastval; } @@ -336,7 +336,7 @@ execselect(Estate state, UNUSED(int do_exec)) loops--; simple_pline = old_simple_pline; state->pc = end; - this_noerrexit = 1; + this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END); return lastval; } @@ -478,7 +478,7 @@ execwhile(Estate state, UNUSED(int do_exec)) popheap(); loops--; state->pc = end; - this_noerrexit = 1; + this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END); return lastval; } @@ -532,7 +532,7 @@ execrepeat(Estate state, UNUSED(int do_exec)) loops--; simple_pline = old_simple_pline; state->pc = end; - this_noerrexit = 1; + this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END); return lastval; } @@ -587,7 +587,7 @@ execif(Estate state, int do_exec) lastval = 0; } state->pc = end; - this_noerrexit = 1; + this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END); return lastval; } @@ -701,7 +701,7 @@ execcase(Estate state, int do_exec) if (!anypatok) lastval = 0; - this_noerrexit = 1; + this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END); return lastval; }