From: Ben Darnell Date: Wed, 25 May 2011 05:29:53 +0000 (-0700) Subject: Fix decoding of non-ascii characters in query strings X-Git-Tag: v2.0.0~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50c2e49bf0ecb2bd7f501b43cdcb592d0c3a0c34;p=thirdparty%2Ftornado.git Fix decoding of non-ascii characters in query strings --- diff --git a/tornado/httpserver.py b/tornado/httpserver.py index 344ed29fd..b78d05e3a 100644 --- a/tornado/httpserver.py +++ b/tornado/httpserver.py @@ -23,7 +23,7 @@ import socket import time import urlparse -from tornado.escape import utf8 +from tornado.escape import utf8, native_str from tornado import httputil from tornado import ioloop from tornado import iostream @@ -506,7 +506,7 @@ class HTTPRequest(object): self._start_time = time.time() self._finish_time = None - scheme, netloc, path, query, fragment = urlparse.urlsplit(uri) + scheme, netloc, path, query, fragment = urlparse.urlsplit(native_str(uri)) self.path = path self.query = query arguments = parse_qs(query) diff --git a/tornado/test/httpserver_test.py b/tornado/test/httpserver_test.py index eb0bbfdea..952161287 100644 --- a/tornado/test/httpserver_test.py +++ b/tornado/test/httpserver_test.py @@ -135,4 +135,16 @@ class HTTPConnectionTest(AsyncHTTPTestCase, LogTrapTestCase): self.assertEqual(u"\u00e1", data["argument"]) self.assertEqual(u"\u00f3", data["filename"]) self.assertEqual(u"\u00fa", data["filebody"]) - + +class EchoHandler(RequestHandler): + def get(self): + self.write(self.request.arguments) + +class HTTPServerTest(AsyncHTTPTestCase, LogTrapTestCase): + def get_app(self): + return Application([("/echo", EchoHandler)]) + + def test_query_string_encoding(self): + response = self.fetch("/echo?foo=%C3%A9") + data = json_decode(response.body) + self.assertEqual(data, {u"foo": [u"\u00e9"]})