diff options
| author | bors <bors@rust-lang.org> | 2015-10-15 14:43:47 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-10-15 14:43:47 +0000 |
| commit | be3d390cf51545b880c5cd78585fa408c087f786 (patch) | |
| tree | 9075384c73eff1774dfc50fb829613a0c0d71ee5 | |
| parent | 7ac89d27ad728d39cbc3ef99ccecdb24de45c0c3 (diff) | |
| parent | 71dcd7f70c084ea4f8e7788b617c9c2ea786e6b7 (diff) | |
Auto merge of #29050 - rkruppe:dec2flt-lonely-sign, r=alexcrichton
Fixes #29042
| -rw-r--r-- | src/libcore/num/dec2flt/parse.rs | 7 | ||||
| -rw-r--r-- | src/libcoretest/num/dec2flt/mod.rs | 12 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/libcore/num/dec2flt/parse.rs b/src/libcore/num/dec2flt/parse.rs index 58e2a6e9bba..414bcc874ea 100644 --- a/src/libcore/num/dec2flt/parse.rs +++ b/src/libcore/num/dec2flt/parse.rs @@ -59,7 +59,12 @@ pub fn parse_decimal(s: &str) -> ParseResult { let s = s.as_bytes(); let (integral, s) = eat_digits(s); match s.first() { - None => Valid(Decimal::new(integral, b"", 0)), + None => { + if integral.is_empty() { + return Invalid; // No digits at all + } + Valid(Decimal::new(integral, b"", 0)) + } Some(&b'e') | Some(&b'E') => { if integral.is_empty() { return Invalid; // No digits before 'e' diff --git a/src/libcoretest/num/dec2flt/mod.rs b/src/libcoretest/num/dec2flt/mod.rs index 51fea6e0171..0c92b2fe2a7 100644 --- a/src/libcoretest/num/dec2flt/mod.rs +++ b/src/libcoretest/num/dec2flt/mod.rs @@ -102,6 +102,18 @@ fn lonely_dot() { } #[test] +fn lonely_sign() { + assert!("+".parse::<f32>().is_err()); + assert!("-".parse::<f64>().is_err()); +} + +#[test] +fn whitespace() { + assert!(" 1.0".parse::<f32>().is_err()); + assert!("1.0 ".parse::<f64>().is_err()); +} + +#[test] fn nan() { assert!("NaN".parse::<f32>().unwrap().is_nan()); assert!("NaN".parse::<f64>().unwrap().is_nan()); |
