@@ -439,6 +439,9 @@ macro_rules! parser_primitive {
439
439
( $t: ty) => {
440
440
impl Parser for $t {
441
441
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
+ }
442
445
match atoi:: FromRadix10SignedChecked :: from_radix_10_signed_checked(
443
446
string. as_bytes( ) ,
444
447
) {
@@ -2303,4 +2306,22 @@ mod tests {
2303
2306
assert_eq ! ( i, result. unwrap( ) ) ;
2304
2307
}
2305
2308
}
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
+ }
2306
2327
}
0 commit comments