Skip to content

Commit

Permalink
fix wsgi PATH_INFO encoding (#998)
Browse files Browse the repository at this point in the history
* fix wsgi PATH_INFO encoding

* encode root_path

* wsgi middleware: Add test for PATH_INFO & SCRIPT_NAME encoding

Co-authored-by: Jamie Hewland <jhewland@gmail.com>
  • Loading branch information
子休 and JayH5 committed Jul 15, 2020
1 parent 14139c2 commit 85b9c26
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
4 changes: 2 additions & 2 deletions starlette/middleware/wsgi.py
Expand Up @@ -13,8 +13,8 @@ def build_environ(scope: Scope, body: bytes) -> dict:
"""
environ = {
"REQUEST_METHOD": scope["method"],
"SCRIPT_NAME": scope.get("root_path", ""),
"PATH_INFO": scope["path"],
"SCRIPT_NAME": scope.get("root_path", "").encode("utf8").decode("latin1"),
"PATH_INFO": scope["path"].encode("utf8").decode("latin1"),
"QUERY_STRING": scope["query_string"].decode("ascii"),
"SERVER_PROTOCOL": f"HTTP/{scope['http_version']}",
"wsgi.version": (1, 0),
Expand Down
15 changes: 15 additions & 0 deletions tests/middleware/test_wsgi.py
Expand Up @@ -128,3 +128,18 @@ def test_build_environ():
"wsgi.url_scheme": "https",
"wsgi.version": (1, 0),
}


def test_build_environ_encoding() -> None:
scope = {
"type": "http",
"http_version": "1.1",
"method": "GET",
"path": "/小星",
"root_path": "/中国",
"query_string": b"a=123&b=456",
"headers": [],
}
environ = build_environ(scope, b"")
assert environ["SCRIPT_NAME"] == "/中国".encode("utf8").decode("latin-1")
assert environ["PATH_INFO"] == "/小星".encode("utf8").decode("latin-1")

0 comments on commit 85b9c26

Please sign in to comment.