From 1658d16b4e5686d757f845ceff076793d4aedc92 Mon Sep 17 00:00:00 2001 From: Guillaume Gielly Date: Thu, 26 Dec 2024 20:40:49 +0100 Subject: [PATCH] Prevents buffer overflow on 'scale' --- src/header/monetary/strfmon.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/header/monetary/strfmon.rs b/src/header/monetary/strfmon.rs index 540ec1003c..c2f0f3e1fd 100644 --- a/src/header/monetary/strfmon.rs +++ b/src/header/monetary/strfmon.rs @@ -184,6 +184,13 @@ fn format_monetary( // 3) split the value into integer and fractional parts let scale = pow(10.0, frac_digits as f64); + + // Check for overflow + let max_safe_int = (i64::MAX as f64) / scale; + if abs_value >= max_safe_int { + return None; + } + let mut int_part = trunc(abs_value) as i64; let mut frac_part = round((abs_value - int_part as f64) * scale) as i64;