From f5219be867e11c81f463c769e01caa2d79702926 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 14 Sep 2021 12:52:55 -0700 Subject: [PATCH 1/2] Add test parsing `-0` --- tests/test.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test.rs b/tests/test.rs index 9fdf26cc7..d6a0e81c1 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -805,6 +805,7 @@ fn test_parse_u64() { #[test] fn test_parse_negative_zero() { for negative_zero in &[ + "-0", "-0.0", "-0e2", "-0.0e2", From 51a4db1631d2746f28fe3b6f2eafda3aff03af4b Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 14 Sep 2021 12:58:27 -0700 Subject: [PATCH 2/2] Parse -0 as float -0.0 instead of integer 0 --- src/de.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de.rs b/src/de.rs index 7cc9f9b8e..a2f34b908 100644 --- a/src/de.rs +++ b/src/de.rs @@ -434,8 +434,8 @@ impl<'de, R: Read<'de>> Deserializer { } else { let neg = (significand as i64).wrapping_neg(); - // Convert into a float if we underflow. - if neg > 0 { + // Convert into a float if we underflow, or on `-0`. + if neg >= 0 { ParserNumber::F64(-(significand as f64)) } else { ParserNumber::I64(neg)