[2.1.x] Fixed #29627 -- Fixed QueryDict.urlencode() crash with non-string values.
Regression in7d96f0c49a
. Backport ofd8e2be459f
from master
This commit is contained in:
parent
66c0c58cf2
commit
0cfca0f2cc
|
@ -520,7 +520,7 @@ class QueryDict(MultiValueDict):
|
|||
return urlencode({k: v})
|
||||
for k, list_ in self.lists():
|
||||
output.extend(
|
||||
encode(k.encode(self.encoding), v.encode(self.encoding))
|
||||
encode(k.encode(self.encoding), str(v).encode(self.encoding))
|
||||
for v in list_
|
||||
)
|
||||
return '&'.join(output)
|
||||
|
|
|
@ -11,3 +11,6 @@ Bugfixes
|
|||
|
||||
* Fixed a race condition in ``QuerySet.update_or_create()`` that could result
|
||||
in data loss (:ticket:`29499`).
|
||||
|
||||
* Fixed a regression where ``QueryDict.urlencode()`` crashed if the dictionary
|
||||
contains a non-string value (:ticket:`29627`).
|
||||
|
|
|
@ -114,6 +114,13 @@ class QueryDictTests(SimpleTestCase):
|
|||
self.assertEqual(q.urlencode(), 'next=%2Ft%C3%ABst%26key%2F')
|
||||
self.assertEqual(q.urlencode(safe='/'), 'next=/t%C3%ABst%26key/')
|
||||
|
||||
def test_urlencode_int(self):
|
||||
# Normally QueryDict doesn't contain non-string values but lazily
|
||||
# written tests may make that mistake.
|
||||
q = QueryDict(mutable=True)
|
||||
q['a'] = 1
|
||||
self.assertEqual(q.urlencode(), 'a=1')
|
||||
|
||||
def test_mutable_copy(self):
|
||||
"""A copy of a QueryDict is mutable."""
|
||||
q = QueryDict().copy()
|
||||
|
|
Loading…
Reference in New Issue