]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Fix decoding of non-ascii characters in query strings
authorBen Darnell <ben@bendarnell.com>
Wed, 25 May 2011 05:29:53 +0000 (22:29 -0700)
committerBen Darnell <ben@bendarnell.com>
Wed, 25 May 2011 05:29:53 +0000 (22:29 -0700)
tornado/httpserver.py
tornado/test/httpserver_test.py

index 344ed29fd7cadcd0d83d2e527c93e0c4e58abdef..b78d05e3a9e963d3f429c3fb12b50f44c7994cb1 100644 (file)
@@ -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)
index eb0bbfdeaae9432cb004b7984a11f04b902ebba6..952161287f0806918a16fede1353d9731ee477fe 100644 (file)
@@ -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"]})