From 2161f0540f920b946454fba4928814a2cba1feb6 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Wed, 3 Oct 2018 22:23:48 -0700 Subject: [PATCH] Fix overflow on i32::min_value() as exponent --- src/de.rs | 2 +- tests/test.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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,