From 4e6115ee759b4b6f5c439d924547ce75c97517b6 Mon Sep 17 00:00:00 2001 From: Heinz Gies Date: Wed, 20 Mar 2024 08:47:57 +0100 Subject: [PATCH] Fix #371 possible panic in fuzzing Signed-off-by: Heinz Gies --- src/numberparse/correct.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/numberparse/correct.rs b/src/numberparse/correct.rs index 5f26073e..f9088a77 100644 --- a/src/numberparse/correct.rs +++ b/src/numberparse/correct.rs @@ -9,9 +9,8 @@ use super::{is_made_of_eight_digits_fast, parse_eight_digits_unrolled}; use crate::charutils::is_structural_or_whitespace; use crate::error::Error; use crate::safer_unchecked::GetSaferUnchecked; -use crate::unlikely; use crate::StaticNode; -use crate::{static_cast_i64, Deserializer, ErrorType, Result}; +use crate::{Deserializer, ErrorType, Result}; macro_rules! get { ($buf:ident, $idx:expr) => { @@ -92,7 +91,9 @@ impl<'de> Deserializer<'de> { idx += 1; let first_after_period = idx as i64; if is_integer(get!(buf, idx)) { - num = 10_u64.wrapping_mul(num) + u64::from(get!(buf, idx) - b'0'); + num = 10_u64 + .wrapping_mul(num) + .wrapping_add(u64::from(get!(buf, idx) - b'0')); idx += 1; } else { err!(idx, get!(buf, idx)) @@ -111,7 +112,9 @@ impl<'de> Deserializer<'de> { } } while is_integer(get!(buf, idx)) { - num = 10_u64.wrapping_mul(num) + u64::from(get!(buf, idx) - b'0'); + num = 10_u64 + .wrapping_mul(num) + .wrapping_add(u64::from(get!(buf, idx) - b'0')); idx += 1; } exponent = first_after_period.wrapping_sub(idx as i64);