@@ -1043,7 +1043,12 @@ async fn ax_get_file(
10431043 let mut end = metadata. len ( ) ;
10441044 // is Content-Range present?
10451045 if let Some ( range) = rxheaders. get ( "Range" ) {
1046- ( start, end) = parse_range ( range. to_str ( ) . unwrap ( ) ) ;
1046+ match range. to_str ( ) . ok ( ) . and_then ( parse_range) {
1047+ Some ( parsed) => ( start, end) = parsed,
1048+ None => {
1049+ return ( StatusCode :: RANGE_NOT_SATISFIABLE , "Malformed Range header" ) . into_response ( ) ;
1050+ }
1051+ }
10471052 }
10481053 // if start is set to non-zero, we need to seek
10491054 if start != 0 && ( end == metadata. len ( ) || end == 0 ) {
@@ -1128,18 +1133,12 @@ fn write_file_driver(
11281133
11291134/// Parse range header
11301135/// We support limited range only for now
1131- fn parse_range ( range : & str ) -> ( u64 , u64 ) {
1132- let parts: Vec < & str > = range. split ( "=" ) . collect ( ) ;
1133- let range_parts: Vec < & str > = parts[ 1 ] . split ( "-" ) . collect ( ) ;
1134- let start = range_parts[ 0 ] . parse :: < u64 > ( ) . unwrap ( ) ;
1135- if range_parts. len ( ) == 1 {
1136- return ( start, 0 ) ;
1137- }
1138- let end = range_parts[ 1 ] . parse :: < u64 > ( ) ;
1139- match end {
1140- Ok ( end) => ( start, end) ,
1141- Err ( _) => ( start, 0 ) ,
1142- }
1136+ fn parse_range ( range : & str ) -> Option < ( u64 , u64 ) > {
1137+ let ( _, range_spec) = range. split_once ( '=' ) ?;
1138+ let ( start_str, end_str) = range_spec. split_once ( '-' ) ?;
1139+ let start = start_str. parse :: < u64 > ( ) . ok ( ) ?;
1140+ let end = end_str. parse :: < u64 > ( ) . unwrap_or ( 0 ) ;
1141+ Some ( ( start, end) )
11431142}
11441143
11451144/// Verify the Authorization header
0 commit comments