diff options
author | Nadrieril | 2019-03-23 13:45:54 +0100 |
---|---|---|
committer | Nadrieril | 2019-03-23 13:45:54 +0100 |
commit | 120970ccd70b1e8eb3867fc2b511c1967eaaabbb (patch) | |
tree | 3b30a7e7b72351745cbfe81f50911b9defb5d482 /dhall_core | |
parent | 4a45ed7e1f80a7d3e4032e08eb499dab3412453f (diff) |
Handle double overflows in parser
Diffstat (limited to 'dhall_core')
-rw-r--r-- | dhall_core/src/parser.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/dhall_core/src/parser.rs b/dhall_core/src/parser.rs index 9fd3213..9b73bfd 100644 --- a/dhall_core/src/parser.rs +++ b/dhall_core/src/parser.rs @@ -355,10 +355,15 @@ make_parser! { rule!(double_literal_raw<core::Double>; raw_pair!(pair) => { - pair.as_str().trim() - .parse::<f64>() - .map(NaiveDouble::from) - .map_err(|e: std::num::ParseFloatError| custom_parse_error(&pair, format!("{}", e)))? + let s = pair.as_str().trim(); + match s.parse::<f64>() { + Ok(x) if x.is_infinite() => + Err(custom_parse_error(&pair, + format!("Overflow while parsing double literal '{}'", s) + ))?, + Ok(x) => NaiveDouble::from(x), + Err(e) => Err(custom_parse_error(&pair, format!("{}", e)))?, + } } ); |