File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -706,7 +706,7 @@ def send_head(self):
706706 """
707707 path = self .translate_path (self .path )
708708 f = None
709- self .range = self .get_range ()
709+ self .range = self .parse_range ()
710710 if os .path .isdir (path ):
711711 parts = urllib .parse .urlsplit (self .path )
712712 if not parts .path .endswith ('/' ):
@@ -944,7 +944,7 @@ def guess_type(self, path):
944944 return guess
945945 return 'application/octet-stream'
946946
947- def get_range (self ):
947+ def parse_range (self ):
948948 """Return a tuple of (start, end) representing the range header in
949949 the HTTP request. If the range header is missing or not resolvable,
950950 None is returned. This only supports single part ranges.
@@ -956,11 +956,13 @@ def get_range(self):
956956 m = re .match (r'bytes=(\d+)-(\d*)$' , range_header )
957957 if not m :
958958 return None
959- start = m .group (1 )
959+ start = int ( m .group (1 ) )
960960 if not m .group (2 ):
961- return int (start ), None
962- end = m .group (2 )
963- return int (start ), int (end )
961+ return start , None
962+ end = int (m .group (2 ))
963+ if start > end :
964+ return None
965+ return start , end
964966
965967
966968# Utilities for CGIHTTPRequestHandler
Original file line number Diff line number Diff line change @@ -557,6 +557,9 @@ def test_range_get(self):
557557 response = self .request (self .base_url + '/test' , headers = {'Range' : 'bytes=100-200' })
558558 self .check_status_and_reason (response , HTTPStatus .REQUESTED_RANGE_NOT_SATISFIABLE )
559559
560+ response = self .request (self .base_url + '/test' , headers = {'Range' : 'bytes=4-3' })
561+ self .check_status_and_reason (response , HTTPStatus .OK , data = self .data )
562+
560563 response = self .request (self .base_url + '/test' , headers = {'Range' : 'bytes=wrong format' })
561564 self .check_status_and_reason (response , HTTPStatus .OK , data = self .data )
562565
You can’t perform that action at this time.
0 commit comments