summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/http/multipartparser.py2
-rw-r--r--tests/requests_tests/tests.py19
2 files changed, 14 insertions, 7 deletions
diff --git a/django/http/multipartparser.py b/django/http/multipartparser.py
index d420c255eb..b834b8b31b 100644
--- a/django/http/multipartparser.py
+++ b/django/http/multipartparser.py
@@ -726,7 +726,7 @@ def parse_boundary_stream(stream, max_header_size):
name = header_name.lower().rstrip(" ")
value, params = parse_header_parameters(value_and_params.lstrip(" "))
params = {k: v.encode() for k, v in params.items()}
- except ValueError: # Invalid header.
+ except (ValueError, LookupError): # Invalid header.
continue
if name == "content-disposition":
diff --git a/tests/requests_tests/tests.py b/tests/requests_tests/tests.py
index e52989b0da..e1744bf180 100644
--- a/tests/requests_tests/tests.py
+++ b/tests/requests_tests/tests.py
@@ -455,11 +455,18 @@ class RequestsTests(SimpleTestCase):
request.body
def test_malformed_multipart_header(self):
- for header in [
- 'Content-Disposition : form-data; name="name"',
- 'Content-Disposition:form-data; name="name"',
- 'Content-Disposition :form-data; name="name"',
- ]:
+ tests = [
+ ('Content-Disposition : form-data; name="name"', {"name": ["value"]}),
+ ('Content-Disposition:form-data; name="name"', {"name": ["value"]}),
+ ('Content-Disposition :form-data; name="name"', {"name": ["value"]}),
+ # The invalid encoding causes the entire part to be skipped.
+ (
+ 'Content-Disposition: form-data; name="name"; '
+ "filename*=BOGUS''test%20file.txt",
+ {},
+ ),
+ ]
+ for header, expected_post in tests:
with self.subTest(header):
payload = FakePayload(
"\r\n".join(
@@ -480,7 +487,7 @@ class RequestsTests(SimpleTestCase):
"wsgi.input": payload,
}
)
- self.assertEqual(request.POST, {"name": ["value"]})
+ self.assertEqual(request.POST, expected_post)
def test_body_after_POST_multipart_related(self):
"""