From ca872ba3e78f8ad12cf9fc35c44be36141cfff1b Mon Sep 17 00:00:00 2001 From: Mike Belopuhov Date: Mon, 16 Nov 2020 15:16:53 +0100 Subject: [PATCH] Fix deserializing floats written in scientific notation --- src/de.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/de.rs b/src/de.rs index fa1c876..6fb2fcd 100644 --- a/src/de.rs +++ b/src/de.rs @@ -279,6 +279,18 @@ where self.input.collect_unsigned(&mut buf)?; } + let exp = self.input.peek()?; + + if let Some(exp) = exp { + if matches!(exp, b'e' | b'E') { + buf.push(b'E'); + self.input.expect(exp)?; + + self.input.collect_sign(&mut buf)?; + self.input.collect_unsigned(&mut buf)?; + } + } + self.input.expect(b';')?; visitor.visit_f64(parse_bytes(buf)?) @@ -598,6 +610,10 @@ mod tests { assert_deserializes!(f64, b"d:-1.9;", -1.9); assert_deserializes!(f64, b"d:0.9;", 0.9); assert_deserializes!(f64, b"d:1.9;", 1.9); + assert_deserializes!(f64, b"d:3.0e-15;", 3.0E-15); + assert_deserializes!(f64, b"d:3.0e15;", 3.0E15); + assert_deserializes!(f64, b"d:3.0e+15;", 3.0E+15); + assert_deserializes!(f64, b"d:3.0000000000000004E-5;", 3.0000000000000004E-5); } #[test]