summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/http/multipartparser.py2
-rw-r--r--tests/requests/tests.py11
2 files changed, 12 insertions, 1 deletions
diff --git a/django/http/multipartparser.py b/django/http/multipartparser.py
index 958b519dc3..526e161ae4 100644
--- a/django/http/multipartparser.py
+++ b/django/http/multipartparser.py
@@ -70,7 +70,7 @@ class MultiPartParser:
ctypes, opts = parse_header(content_type.encode('ascii'))
boundary = opts.get('boundary')
if not boundary or not cgi.valid_boundary(boundary):
- raise MultiPartParserError('Invalid boundary in multipart: %s' % boundary.decode())
+ raise MultiPartParserError('Invalid boundary in multipart: %s' % force_str(boundary))
# Content-Length should contain the length of the body we are about
# to receive.
diff --git a/tests/requests/tests.py b/tests/requests/tests.py
index 9391ca2a08..945d77ff6e 100644
--- a/tests/requests/tests.py
+++ b/tests/requests/tests.py
@@ -5,6 +5,7 @@ from urllib.parse import urlencode
from django.core.exceptions import DisallowedHost
from django.core.handlers.wsgi import LimitedStream, WSGIRequest
from django.http import HttpRequest, RawPostDataException, UnreadablePostError
+from django.http.multipartparser import MultiPartParserError
from django.http.request import HttpHeaders, split_domain_port
from django.test import RequestFactory, SimpleTestCase, override_settings
from django.test.client import FakePayload
@@ -476,6 +477,16 @@ class RequestsTests(SimpleTestCase):
})
self.assertFalse(request.POST._mutable)
+ def test_multipart_without_boundary(self):
+ request = WSGIRequest({
+ 'REQUEST_METHOD': 'POST',
+ 'CONTENT_TYPE': 'multipart/form-data;',
+ 'CONTENT_LENGTH': 0,
+ 'wsgi.input': FakePayload(),
+ })
+ with self.assertRaisesMessage(MultiPartParserError, 'Invalid boundary in multipart: None'):
+ request.POST
+
def test_POST_connection_error(self):
"""
If wsgi.input.read() raises an exception while trying to read() the