summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2012-02-13 04:54:05 +0100
committerDan McGee <dan@archlinux.org>2012-02-13 04:54:05 +0100
commit30acd5c81689545ba02dfa392b118f262f3511b8 (patch)
tree393d3b50680a9d997df7d0ecbf20d24fe83997d8 /packages
parentc3ebf7deae0bb04f1637e9a52e7f9f38d454fec7 (diff)
downloadarchweb-30acd5c81689545ba02dfa392b118f262f3511b8.tar.gz
archweb-30acd5c81689545ba02dfa392b118f262f3511b8.tar.xz
Protect urlencode calls against Unicode data
These would cause page errors if passed anything not in the ASCII character set. This change allows for packages to have names composed of any Unicode characters, not just those in the ASCII set. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'packages')
-rw-r--r--packages/templatetags/package_extras.py7
-rw-r--r--packages/urls.py2
-rw-r--r--packages/views/__init__.py2
3 files changed, 7 insertions, 4 deletions
diff --git a/packages/templatetags/package_extras.py b/packages/templatetags/package_extras.py
index 25e943f..5cc826e 100644
--- a/packages/templatetags/package_extras.py
+++ b/packages/templatetags/package_extras.py
@@ -9,8 +9,11 @@ from django.utils.html import escape
register = template.Library()
-def link_encode(url, query, doseq=False):
- data = urlencode(query, doseq).replace('&', '&amp;')
+def link_encode(url, query):
+ # massage the data into all utf-8 encoded strings first, so urlencode
+ # doesn't barf at the data we pass it
+ query = dict((k, unicode(v).encode('utf-8')) for k, v in query.items())
+ data = urlencode(query).replace('&', '&amp;')
return "%s?%s" % (url, data)
@register.filter
diff --git a/packages/urls.py b/packages/urls.py
index 6c61629..52b09d2 100644
--- a/packages/urls.py
+++ b/packages/urls.py
@@ -28,7 +28,7 @@ urlpatterns = patterns('packages.views',
(r'^stale_relations/$', 'stale_relations'),
(r'^stale_relations/update/$','stale_relations_update'),
- (r'^(?P<name>[A-z0-9\-+.]+)/$',
+ (r'^(?P<name>[^ /]+)/$',
'details'),
(r'^(?P<repo>[A-z0-9\-]+)/(?P<name>[^ /]+)/$',
'details'),
diff --git a/packages/views/__init__.py b/packages/views/__init__.py
index 6394247..8f22a8a 100644
--- a/packages/views/__init__.py
+++ b/packages/views/__init__.py
@@ -142,7 +142,7 @@ def details(request, name='', repo='', arch=''):
('q', name),
]
# only include non-blank values in the query we generate
- pkg_data = [(x, y) for x, y in pkg_data if y]
+ pkg_data = [(x, y.encode('utf-8')) for x, y in pkg_data if y]
return redirect("/packages/?%s" % urlencode(pkg_data))
def groups(request, arch=None):