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: |