summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2022-11-08 20:36:49 -0800
committerBart Schaefer <schaefer@zsh.org>2022-11-08 20:36:49 -0800
commitd873ed6026d7b0c48d6e65ec06df491d015a4d59 (patch)
tree307d5a07b8fd0b269c03310ce24f50e13e8a2f36
parent298919f43a565cc2e130c8cb3f67773f7a54fca1 (diff)
downloadzsh-d873ed6026d7b0c48d6e65ec06df491d015a4d59.tar.gz
zsh-d873ed6026d7b0c48d6e65ec06df491d015a4d59.zip
50897: nonzero status of complex commands should trigger ERR_EXIT
-rw-r--r--ChangeLog5
-rw-r--r--Src/exec.c2
-rw-r--r--Src/loop.c12
3 files changed, 12 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 3018706b8..76a8091e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2022-11-08 Bart Schaefer <schaefer@zsh.org>
+
+ * 50897: Src/exec.c, Src/loop.c: nonzero status of complex
+ commands should trigger ERR_EXIT
+
2022-11-08 Peter Stephenson <p.stephenson@samsung.com>
* 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;
}