summaryrefslogtreecommitdiff
path: root/django/http/request.py
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2014-07-12 19:37:59 +0200
committerClaude Paroz <claude@2xlibre.net>2014-08-19 22:29:31 +0200
commitfa02120d360387bebbbe735e86686bb4c7c43db2 (patch)
tree7560f8734d1e832fda77b8e4b1450b10799b5a2f /django/http/request.py
parent11d9cbe2f46583716aed4859f180a973bf2d5cf4 (diff)
downloaddjango-fa02120d360387bebbbe735e86686bb4c7c43db2.tar.gz
Fixed #22996 -- Prevented crash with unencoded query string
Thanks Jorge Carleitao for the report and Aymeric Augustin, Tim Graham for the reviews.
Diffstat (limited to 'django/http/request.py')
-rw-r--r--django/http/request.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/django/http/request.py b/django/http/request.py
index c87a4c5125..e251e62b66 100644
--- a/django/http/request.py
+++ b/django/http/request.py
@@ -329,8 +329,12 @@ class QueryDict(MultiValueDict):
self.encoding = encoding
if six.PY3:
if isinstance(query_string, bytes):
- # query_string contains URL-encoded data, a subset of ASCII.
- query_string = query_string.decode()
+ # query_string normally contains URL-encoded data, a subset of ASCII.
+ try:
+ query_string = query_string.decode(encoding)
+ except UnicodeDecodeError:
+ # ... but some user agents are misbehaving :-(
+ query_string = query_string.decode('iso-8859-1')
for key, value in parse_qsl(query_string or '',
keep_blank_values=True,
encoding=encoding):
@@ -338,8 +342,12 @@ class QueryDict(MultiValueDict):
else:
for key, value in parse_qsl(query_string or '',
keep_blank_values=True):
+ try:
+ value = value.decode(encoding)
+ except UnicodeDecodeError:
+ value = value.decode('iso-8859-1')
self.appendlist(force_text(key, encoding, errors='replace'),
- force_text(value, encoding, errors='replace'))
+ value)
self._mutable = mutable
@property