about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2024-01-24 18:00:16 -0800
committerBart Schaefer <schaefer@zsh.org>2024-01-24 18:00:16 -0800
commit1f861ceba1d5740798caa0a3f208f3047c6e3ff5 (patch)
treeb228d92657f722bedfc18972bcb4be7628ea59d5
parentb3e763cc228b182019c22a3490312f7b17df4029 (diff)
downloadzsh-1f861ceba1d5740798caa0a3f208f3047c6e3ff5.tar.gz
zsh-1f861ceba1d5740798caa0a3f208f3047c6e3ff5.tar.xz
zsh-1f861ceba1d5740798caa0a3f208f3047c6e3ff5.zip
52492: prevent indexing error on recursive arithmetic in array subscript
Operator returns error when operand returns error
-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) {