components/python/cherrypy/patches/cp-ticket-1386.patch
changeset 5947 d9fcc08e98bf
parent 5109 5d341c4a6b80
equal deleted inserted replaced
5946:e88e3336ea13 5947:d9fcc08e98bf
     1 # This issue has been offered to upstream but not be accepted yet.
     1 # This issue has been offered to upstream and merged.
     2 # Please see https://bitbucket.org/cherrypy/cherrypy/issues/1386/parse_request_uri-incorrectly-parses-uri
     2 # Please see https://bitbucket.org/cherrypy/cherrypy/commits/89dbd2f00b541f8f8378eaabf2caef3e932bb805
       
     3 # HG changeset patch
       
     4 # User Yiteng Zhang <[email protected]>
       
     5 # Date 1461887965 25200
       
     6 # Node ID 89dbd2f00b541f8f8378eaabf2caef3e932bb805
       
     7 # Parent  ea07b29deabd28d5a10b764a1a452c876692d028
       
     8 parse_request_uri() incorrectly parses URI which contains ://
     3 
     9 
     4 diff -r 252fccc270d4 cherrypy/wsgiserver/wsgiserver2.py
    10 --- cherrypy/wsgiserver/wsgiserver2.py
     5 --- cherrypy/wsgiserver/wsgiserver2.py	Tue Sep 01 12:23:22 2015 +0100
    11 +++ cherrypy/wsgiserver/wsgiserver2.py
     6 +++ cherrypy/wsgiserver/wsgiserver2.py	Thu Oct 22 23:16:55 2015 -0700
    12 @@ -92,6 +92,7 @@
     7 @@ -125,6 +125,7 @@
    13  import traceback as traceback_
     8  import operator
    14  import operator
     9  
       
    10  from urllib import unquote
    15  from urllib import unquote
    11 +from urlparse import urlparse
    16 +from urlparse import urlparse
    12  import warnings
    17  import warnings
    13  
    18  import errno
    14  if sys.version_info >= (3, 0):
    19  import logging
    15 @@ -835,15 +836,12 @@
    20 @@ -830,15 +831,12 @@
    16          if uri == ASTERISK:
    21          if uri == ASTERISK:
    17              return None, None, uri
    22              return None, None, uri
    18  
    23  
    19 -        i = uri.find('://')
    24 -        i = uri.find('://')
    20 -        if i > 0 and QUESTION_MARK not in uri[:i]:
    25 -        if i > 0 and QUESTION_MARK not in uri[:i]:
    28 -            authority, path = remainder.split(FORWARD_SLASH, 1)
    33 -            authority, path = remainder.split(FORWARD_SLASH, 1)
    29 -            path = FORWARD_SLASH + path
    34 -            path = FORWARD_SLASH + path
    30              return scheme, authority, path
    35              return scheme, authority, path
    31  
    36  
    32          if uri.startswith(FORWARD_SLASH):
    37          if uri.startswith(FORWARD_SLASH):
    33 diff -r 252fccc270d4 cherrypy/wsgiserver/wsgiserver3.py
    38 --- cherrypy/wsgiserver/wsgiserver3.py
    34 --- cherrypy/wsgiserver/wsgiserver3.py	Tue Sep 01 12:23:22 2015 +0100
    39 +++ cherrypy/wsgiserver/wsgiserver3.py
    35 +++ cherrypy/wsgiserver/wsgiserver3.py	Thu Oct 22 23:16:55 2015 -0700
    40 @@ -92,6 +92,8 @@
    36 @@ -100,6 +100,7 @@
    41  import traceback as traceback_
    37  import threading
    42  import errno
    38  import time
    43  import logging
    39  from traceback import format_exc
       
    40 +from urllib.parse import urlparse
    44 +from urllib.parse import urlparse
    41  
    45 +
    42  if sys.version_info >= (3, 0):
    46  try:
    43      bytestr = bytes
    47      # prefer slower Python-based io module
    44 @@ -813,14 +814,13 @@
    48      import _pyio as io
       
    49 @@ -819,14 +821,13 @@
    45          if uri == ASTERISK:
    50          if uri == ASTERISK:
    46              return None, None, uri
    51              return None, None, uri
    47  
    52  
    48 -        scheme, sep, remainder = uri.partition(b'://')
    53 -        scheme, sep, remainder = uri.partition(b'://')
    49 -        if sep and QUESTION_MARK not in scheme:
    54 -        if sep and QUESTION_MARK not in scheme: