Tolerate slightly invalid formats in query strings (Fixes #126)
This commit is contained in:
@@ -404,11 +404,11 @@ class Request():
|
||||
if len(urlencoded) > 0:
|
||||
if isinstance(urlencoded, str):
|
||||
for k, v in [pair.split('=', 1)
|
||||
for pair in urlencoded.split('&')]:
|
||||
for pair in urlencoded.split('&') if pair]:
|
||||
data[urldecode_str(k)] = urldecode_str(v)
|
||||
elif isinstance(urlencoded, bytes): # pragma: no branch
|
||||
for k, v in [pair.split(b'=', 1)
|
||||
for pair in urlencoded.split(b'&')]:
|
||||
for pair in urlencoded.split(b'&') if pair]:
|
||||
data[urldecode_bytes(k)] = urldecode_bytes(v)
|
||||
return data
|
||||
|
||||
|
||||
@@ -45,6 +45,13 @@ class TestRequest(unittest.TestCase):
|
||||
self.assertEqual(req.args, MultiDict(
|
||||
{'foo': 'bar', 'abc': 'def', 'x': '/%%'}))
|
||||
|
||||
def test_badly_formatted_args(self):
|
||||
fd = get_request_fd('GET', '/?&foo=bar&abc=def&&&x=%2f%%')
|
||||
req = Request.create('app', fd, 'addr')
|
||||
self.assertEqual(req.query_string, '&foo=bar&abc=def&&&x=%2f%%')
|
||||
self.assertEqual(req.args, MultiDict(
|
||||
{'foo': 'bar', 'abc': 'def', 'x': '/%%'}))
|
||||
|
||||
def test_json(self):
|
||||
fd = get_request_fd('GET', '/foo', headers={
|
||||
'Content-Type': 'application/json'}, body='{"foo":"bar"}')
|
||||
|
||||
Reference in New Issue
Block a user