summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Src/math.c7
2 files changed, 9 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d46ce5fe5..b876cb6d1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2024-01-24 Bart Schaefer <schaefer@zsh.org>
+ * 52492: Src/math.c: prevent indexing error when using recursive
+ arithmetic in array subscript (operator stops on operand error)
+
* 52482: Src/subst.c: strip trailing newlines in emulation modes
of ${ command; }, for bash/ksh compatibility
diff --git a/Src/math.c b/Src/math.c
index a060181ed..50b69d6a1 100644
--- a/Src/math.c
+++ b/Src/math.c
@@ -352,6 +352,8 @@ getmathparam(struct mathvalue *mptr)
}
return zero_mnumber;
}
+ if (errflag)
+ return zero_mnumber;
}
result = getnumvalue(mptr->pval);
if (isset(FORCEFLOAT) && result.type == MN_INTEGER) {
@@ -1367,8 +1369,11 @@ op(int what)
}
spval = &stack[sp].val;
- if (stack[sp].val.type == MN_UNSET)
+ if (stack[sp].val.type == MN_UNSET) {
*spval = getmathparam(stack + sp);
+ if (errflag)
+ return;
+ }
switch (what) {
case NOT:
if (spval->type & MN_FLOAT) {