diff --git a/src/de.rs b/src/de.rs index 70ebf0d..020869a 100644 --- a/src/de.rs +++ b/src/de.rs @@ -676,7 +676,7 @@ impl<'de, R: Read<'de>> Deserializer { ) -> Result { let mut f = significand as f64; loop { - match POW10.get(exponent.abs() as usize) { + match POW10.get(exponent.wrapping_abs() as usize) { Some(&pow) => { if exponent >= 0 { f *= pow; diff --git a/tests/test.rs b/tests/test.rs index 954ac90..688dfe5 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -860,6 +860,7 @@ fn test_parse_f64() { ("0.00e00", 0.0), ("0.00e+00", 0.0), ("0.00e-00", 0.0), + ("3.5E-2147483647", 0.0), ( &format!("{}", (i64::MIN as f64) - 1.0), (i64::MIN as f64) - 1.0,