File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -700,7 +700,7 @@ def send_head(self):
700700 """
701701 path = self .translate_path (self .path )
702702 f = None
703- self .range = self .get_range ()
703+ self .range = self .parse_range ()
704704 if os .path .isdir (path ):
705705 parts = urllib .parse .urlsplit (self .path )
706706 if not parts .path .endswith ('/' ):
@@ -937,7 +937,7 @@ def guess_type(self, path):
937937 return guess
938938 return 'application/octet-stream'
939939
940- def get_range (self ):
940+ def parse_range (self ):
941941 """Return a tuple of (start, end) representing the range header in
942942 the HTTP request. If the range header is missing or not resolvable,
943943 None is returned. This only supports single part ranges.
@@ -949,11 +949,13 @@ def get_range(self):
949949 m = re .match (r'bytes=(\d+)-(\d*)$' , range_header )
950950 if not m :
951951 return None
952- start = m .group (1 )
952+ start = int ( m .group (1 ) )
953953 if not m .group (2 ):
954- return int (start ), None
955- end = m .group (2 )
956- return int (start ), int (end )
954+ return start , None
955+ end = int (m .group (2 ))
956+ if start > end :
957+ return None
958+ return start , end
957959
958960
959961# 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