aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Du <alanhdu@gmail.com>2017-05-31 00:07:15 +0100
committerAlan Du <alanhdu@gmail.com>2017-05-31 00:30:55 +0100
commit3322bcd086399a658253e119323f4b4c44aa91ff (patch)
tree2d6194dec004b1ca12db48b767ee44c2070472df
parent7aa2594fb0ccd528087a492d1497f3af580bdb54 (diff)
downloadmilf-rs-3322bcd086399a658253e119323f4b4c44aa91ff.tar.gz
milf-rs-3322bcd086399a658253e119323f4b4c44aa91ff.zip
Error when parsing numbers outside of f64's range
-rw-r--r--src/de.rs6
-rw-r--r--tests/invalid-misc.rs4
2 files changed, 10 insertions, 0 deletions
diff --git a/src/de.rs b/src/de.rs
index bd4ead0..d5af272 100644
--- a/src/de.rs
+++ b/src/de.rs
@@ -893,6 +893,12 @@ impl<'a> Deserializer<'a> {
}
number.parse().map_err(|_e| {
self.error(start, ErrorKind::NumberInvalid)
+ }).and_then(|n: f64| {
+ if n.is_finite() {
+ Ok(n)
+ } else {
+ Err(self.error(start, ErrorKind::NumberInvalid))
+ }
})
}
diff --git a/tests/invalid-misc.rs b/tests/invalid-misc.rs
index 53f625e..bb70b97 100644
--- a/tests/invalid-misc.rs
+++ b/tests/invalid-misc.rs
@@ -10,4 +10,8 @@ fn bad() {
bad("a = 1__1");
bad("a = 1_");
bad("''");
+ bad("a = nan");
+ bad("a = -inf");
+ bad("a = inf");
+ bad("a = 9e99999");
}