From 6cb509ea7d247a565a057359f080fcd0a52a27c1 Mon Sep 17 00:00:00 2001 From: Yordan Miladinov Date: Tue, 24 Aug 2021 00:58:31 +0300 Subject: [PATCH] fix an uncaught exception: denom_lcd may throw an overflow exception if casting lcm to int64_t fails --- libgnucash/engine/gnc-numeric.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libgnucash/engine/gnc-numeric.cpp b/libgnucash/engine/gnc-numeric.cpp index c1142a546c..277e01e0f2 100644 --- a/libgnucash/engine/gnc-numeric.cpp +++ b/libgnucash/engine/gnc-numeric.cpp @@ -756,9 +756,9 @@ gnc_numeric_add(gnc_numeric a, gnc_numeric b, { return gnc_numeric_error(GNC_ERROR_ARG); } - denom = denom_lcd(a, b, denom, how); try { + denom = denom_lcd(a, b, denom, how); if ((how & GNC_NUMERIC_DENOM_MASK) != GNC_HOW_DENOM_EXACT) { GncNumeric an (a), bn (b); @@ -810,9 +810,9 @@ gnc_numeric_sub(gnc_numeric a, gnc_numeric b, { return gnc_numeric_error(GNC_ERROR_ARG); } - denom = denom_lcd(a, b, denom, how); try { + denom = denom_lcd(a, b, denom, how); if ((how & GNC_NUMERIC_DENOM_MASK) != GNC_HOW_DENOM_EXACT) { GncNumeric an (a), bn (b); @@ -863,9 +863,10 @@ gnc_numeric_mul(gnc_numeric a, gnc_numeric b, { return gnc_numeric_error(GNC_ERROR_ARG); } - denom = denom_lcd(a, b, denom, how); + try { + denom = denom_lcd(a, b, denom, how); if ((how & GNC_NUMERIC_DENOM_MASK) != GNC_HOW_DENOM_EXACT) { GncNumeric an (a), bn (b); @@ -917,9 +918,9 @@ gnc_numeric_div(gnc_numeric a, gnc_numeric b, { return gnc_numeric_error(GNC_ERROR_ARG); } - denom = denom_lcd(a, b, denom, how); try { + denom = denom_lcd(a, b, denom, how); if ((how & GNC_NUMERIC_DENOM_MASK) != GNC_HOW_DENOM_EXACT) { GncNumeric an (a), bn (b);