From dc6653aadf984af3bdd3ef45124bcee609dc52bc Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Wed, 15 Oct 2025 11:01:13 +1300 Subject: Fix panic caused by dividing by zero in an expression --- src/types/expression_stack.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/types/expression_stack.rs b/src/types/expression_stack.rs index 16ce0a0..25710d2 100644 --- a/src/types/expression_stack.rs +++ b/src/types/expression_stack.rs @@ -129,9 +129,19 @@ fn op_subtract(l: IntermediateValue, r: IntermediateValue) -> Result Result { Ok(from_isize(to_isize(l)? * to_isize(r)?)) } fn op_divide(l: IntermediateValue, r: IntermediateValue) -> Result { - Ok(from_isize(to_isize(l)? / to_isize(r)?)) } + let l = to_isize(l)?; let r = to_isize(r)?; + match r != 0 { + true => Ok(from_isize(l / r)), + false => Ok(from_isize(0)), + } +} fn op_modulo(l: IntermediateValue, r: IntermediateValue) -> Result { - Ok(from_isize(to_isize(l)? % to_isize(r)?)) } + let l = to_isize(l)?; let r = to_isize(r)?; + match r != 0 { + true => Ok(from_isize(l % r)), + false => Ok(from_isize(0)), + } +} fn op_exponent(l: IntermediateValue, r: IntermediateValue) -> Result { let l = to_isize(l)?; let r = to_isize(r)?; if let Ok(r) = u32::try_from(r) { -- cgit v1.2.3-70-g09d2