From 973d34a45f5cc3da433e051732ef94d103394ebf Mon Sep 17 00:00:00 2001 From: Federico Villa <61495946+federicovilla55@users.noreply.github.com> Date: Sat, 1 Feb 2025 23:00:06 +0100 Subject: [PATCH] Fix Issue: Division by zero crash in assembler constant expressions #347 (#390) --- src/assembler/expreval.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/assembler/expreval.cpp b/src/assembler/expreval.cpp index 822c45190..7b0426ec3 100644 --- a/src/assembler/expreval.cpp +++ b/src/assembler/expreval.cpp @@ -240,7 +240,13 @@ VIntS evaluate(const std::shared_ptr &expr, } FiExpr; IfExpr(Div, v) { - return evaluate(v->lhs, variables) / evaluate(v->rhs, variables); + auto rhs_value = evaluate(v->rhs, variables); + if (rhs_value == 0) { + throw std::runtime_error( + "Division by zero error in expression evaluation."); + } + + return evaluate(v->lhs, variables) / rhs_value; } FiExpr; IfExpr(Mul, v) { @@ -252,7 +258,13 @@ VIntS evaluate(const std::shared_ptr &expr, } FiExpr; IfExpr(Mod, v) { - return evaluate(v->lhs, variables) % evaluate(v->rhs, variables); + auto rhs_value = evaluate(v->rhs, variables); + if (rhs_value == 0) { + throw std::runtime_error( + "Modulo by zero error in expression evaluation."); + } + + return evaluate(v->lhs, variables) % rhs_value; } FiExpr; IfExpr(And, v) {