Skip to content

Commit 146d48e

Browse files
committed
Fix integer parsing of empty strings (apache#5504)
1 parent ad3b4c9 commit 146d48e

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

arrow-cast/src/parse.rs

+21
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,9 @@ macro_rules! parser_primitive {
439439
($t:ty) => {
440440
impl Parser for $t {
441441
fn parse(string: &str) -> Option<Self::Native> {
442+
if !string.as_bytes().last().is_some_and(|x| x.is_ascii_digit()) {
443+
return None;
444+
}
442445
match atoi::FromRadix10SignedChecked::from_radix_10_signed_checked(
443446
string.as_bytes(),
444447
) {
@@ -2303,4 +2306,22 @@ mod tests {
23032306
assert_eq!(i, result.unwrap());
23042307
}
23052308
}
2309+
2310+
#[test]
2311+
fn test_parse_empty() {
2312+
assert_eq!(Int32Type::parse(""), None);
2313+
assert_eq!(Int64Type::parse(""), None);
2314+
assert_eq!(UInt32Type::parse(""), None);
2315+
assert_eq!(UInt64Type::parse(""), None);
2316+
assert_eq!(Float32Type::parse(""), None);
2317+
assert_eq!(Float64Type::parse(""), None);
2318+
assert_eq!(Int32Type::parse("+"), None);
2319+
assert_eq!(Int64Type::parse("+"), None);
2320+
assert_eq!(UInt32Type::parse("+"), None);
2321+
assert_eq!(UInt64Type::parse("+"), None);
2322+
assert_eq!(Float32Type::parse("+"), None);
2323+
assert_eq!(Float64Type::parse("+"), None);
2324+
assert_eq!(TimestampNanosecondType::parse(""), None);
2325+
assert_eq!(Date32Type::parse(""), None);
2326+
}
23062327
}

0 commit comments

Comments
 (0)