diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-12 10:09:38 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-12 10:09:38 (GMT) |
commit | 61dab6e3fa2f40454f29dcee9477bc52a049965e (patch) | |
tree | d7842bc5e6c28ac8a7b5306925bf4da6a48ded62 | |
parent | c8dadc375e74321e0d74b9d4f98dca5bbd9728d0 (diff) | |
parent | 0abbe8c090707130fd492307b79cf5c608dedce0 (diff) | |
download | cpython-61dab6e3fa2f40454f29dcee9477bc52a049965e.zip cpython-61dab6e3fa2f40454f29dcee9477bc52a049965e.tar.gz cpython-61dab6e3fa2f40454f29dcee9477bc52a049965e.tar.bz2 |
Issue #20138: The wsgiref.application_uri() and wsgiref.request_uri()
functions now conform to PEP 3333 when handle non-ASCII URLs.
-rw-r--r-- | Lib/test/test_wsgiref.py | 8 | ||||
-rw-r--r-- | Lib/wsgiref/util.py | 4 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 11 insertions, 4 deletions
diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py index 05c1f4f..4107664 100644 --- a/Lib/test/test_wsgiref.py +++ b/Lib/test/test_wsgiref.py @@ -286,7 +286,7 @@ class UtilityTests(TestCase): def testAppURIs(self): self.checkAppURI("http://127.0.0.1/") self.checkAppURI("http://127.0.0.1/spam", SCRIPT_NAME="/spam") - self.checkAppURI("http://127.0.0.1/sp%C3%A4m", SCRIPT_NAME="/späm") + self.checkAppURI("http://127.0.0.1/sp%E4m", SCRIPT_NAME="/sp\xe4m") self.checkAppURI("http://spam.example.com:2071/", HTTP_HOST="spam.example.com:2071", SERVER_PORT="2071") self.checkAppURI("http://spam.example.com/", @@ -300,15 +300,19 @@ class UtilityTests(TestCase): def testReqURIs(self): self.checkReqURI("http://127.0.0.1/") self.checkReqURI("http://127.0.0.1/spam", SCRIPT_NAME="/spam") - self.checkReqURI("http://127.0.0.1/sp%C3%A4m", SCRIPT_NAME="/späm") + self.checkReqURI("http://127.0.0.1/sp%E4m", SCRIPT_NAME="/sp\xe4m") self.checkReqURI("http://127.0.0.1/spammity/spam", SCRIPT_NAME="/spammity", PATH_INFO="/spam") + self.checkReqURI("http://127.0.0.1/spammity/sp%E4m", + SCRIPT_NAME="/spammity", PATH_INFO="/sp\xe4m") self.checkReqURI("http://127.0.0.1/spammity/spam;ham", SCRIPT_NAME="/spammity", PATH_INFO="/spam;ham") self.checkReqURI("http://127.0.0.1/spammity/spam;cookie=1234,5678", SCRIPT_NAME="/spammity", PATH_INFO="/spam;cookie=1234,5678") self.checkReqURI("http://127.0.0.1/spammity/spam?say=ni", SCRIPT_NAME="/spammity", PATH_INFO="/spam",QUERY_STRING="say=ni") + self.checkReqURI("http://127.0.0.1/spammity/spam?s%E4y=ni", + SCRIPT_NAME="/spammity", PATH_INFO="/spam",QUERY_STRING="s%E4y=ni") self.checkReqURI("http://127.0.0.1/spammity/spam", 0, SCRIPT_NAME="/spammity", PATH_INFO="/spam",QUERY_STRING="say=ni") diff --git a/Lib/wsgiref/util.py b/Lib/wsgiref/util.py index 1f1e6cc..516fe89 100644 --- a/Lib/wsgiref/util.py +++ b/Lib/wsgiref/util.py @@ -57,14 +57,14 @@ def application_uri(environ): if environ['SERVER_PORT'] != '80': url += ':' + environ['SERVER_PORT'] - url += quote(environ.get('SCRIPT_NAME') or '/') + url += quote(environ.get('SCRIPT_NAME') or '/', encoding='latin1') return url def request_uri(environ, include_query=True): """Return the full request URI, optionally including the query string""" url = application_uri(environ) from urllib.parse import quote - path_info = quote(environ.get('PATH_INFO',''),safe='/;=,') + path_info = quote(environ.get('PATH_INFO',''), safe='/;=,', encoding='latin1') if not environ.get('SCRIPT_NAME'): url += path_info[1:] else: @@ -25,6 +25,9 @@ Core and Builtins Library ------- +- Issue #20138: The wsgiref.application_uri() and wsgiref.request_uri() + functions now conform to PEP 3333 when handle non-ASCII URLs. + - Issue #19097: Raise the correct Exception when cgi.FieldStorage is given an Invalid fileobj. |