Fixed #30227 -- Fixed crash on request without boundary in Content-Type.

This commit is contained in:
Tim Graham 2019-03-01 12:53:18 -05:00
parent 8a2ec55b18
commit 2ed2acf872
2 changed files with 12 additions and 1 deletions

View File

@ -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.

View File

@ -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