Skip to content

Commit 71dcd7f

Browse files
author
Robin Kruppe
committed
Reject "+" and "-" when parsing floats.
Fixes #29042
1 parent e3cd872 commit 71dcd7f

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/libcore/num/dec2flt/parse.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,12 @@ pub fn parse_decimal(s: &str) -> ParseResult {
5959
let s = s.as_bytes();
6060
let (integral, s) = eat_digits(s);
6161
match s.first() {
62-
None => Valid(Decimal::new(integral, b"", 0)),
62+
None => {
63+
if integral.is_empty() {
64+
return Invalid; // No digits at all
65+
}
66+
Valid(Decimal::new(integral, b"", 0))
67+
}
6368
Some(&b'e') | Some(&b'E') => {
6469
if integral.is_empty() {
6570
return Invalid; // No digits before 'e'

src/libcoretest/num/dec2flt/mod.rs

+12
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,18 @@ fn lonely_dot() {
101101
assert_eq!(".".parse(), Ok(0.0));
102102
}
103103

104+
#[test]
105+
fn lonely_sign() {
106+
assert!("+".parse::<f32>().is_err());
107+
assert!("-".parse::<f64>().is_err());
108+
}
109+
110+
#[test]
111+
fn whitespace() {
112+
assert!(" 1.0".parse::<f32>().is_err());
113+
assert!("1.0 ".parse::<f64>().is_err());
114+
}
115+
104116
#[test]
105117
fn nan() {
106118
assert!("NaN".parse::<f32>().unwrap().is_nan());

0 commit comments

Comments
 (0)