summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/patchwork/filters.py10
-rw-r--r--apps/patchwork/tests/filters.py9
2 files changed, 17 insertions, 2 deletions
diff --git a/apps/patchwork/filters.py b/apps/patchwork/filters.py
index 52fc03f..002a0a8 100644
--- a/apps/patchwork/filters.py
+++ b/apps/patchwork/filters.py
@@ -445,8 +445,14 @@ class Filters:
if remove.param in params.keys():
del params[remove.param]
- return '?' + '&'.join(['%s=%s' % (quote(k), quote(v))
- for (k,v) in params.iteritems()])
+ pairs = params.iteritems()
+
+ def sanitise(s):
+ if not isinstance(s, basestring):
+ s = unicode(s)
+ return quote(s.encode('utf-8'))
+
+ return '?' + '&'.join(['%s=%s' % map(sanitise, p) for p in pairs])
def querystring_without_filter(self, filter):
return self.querystring(filter)
diff --git a/apps/patchwork/tests/filters.py b/apps/patchwork/tests/filters.py
index 4744583..2c464e5 100644
--- a/apps/patchwork/tests/filters.py
+++ b/apps/patchwork/tests/filters.py
@@ -34,3 +34,12 @@ class FilterQueryStringTest(TestCase):
self.failUnlessEqual(response.status_code, 200)
self.failIf('submitter=a&b=c' in response.content)
self.failIf('submitter=a&b=c' in response.content)
+
+ def testUTF8QSHandling(self):
+ """test that non-ascii characters can be handled by the filter
+ code"""
+ project = defaults.project
+ defaults.project.save()
+ url = '/project/%s/list/?submitter=%%E2%%98%%83' % project.linkname
+ response = self.client.get(url)
+ self.failUnlessEqual(response.status_code, 200)