Refs #30227 -- Added helpful message for non-ASCII Content-Type in mulitpart request.

This commit is contained in:
Tim Graham 2019-03-01 13:47:09 -05:00
parent 2ed2acf872
commit 8ec7ded370
2 changed files with 15 additions and 1 deletions

View File

@ -67,7 +67,10 @@ class MultiPartParser:
raise MultiPartParserError('Invalid Content-Type: %s' % content_type)
# Parse the header to get the boundary to split the parts.
ctypes, opts = parse_header(content_type.encode('ascii'))
try:
ctypes, opts = parse_header(content_type.encode('ascii'))
except UnicodeEncodeError:
raise MultiPartParserError('Invalid non-ASCII Content-Type in multipart: %s' % force_str(content_type))
boundary = opts.get('boundary')
if not boundary or not cgi.valid_boundary(boundary):
raise MultiPartParserError('Invalid boundary in multipart: %s' % force_str(boundary))

View File

@ -487,6 +487,17 @@ class RequestsTests(SimpleTestCase):
with self.assertRaisesMessage(MultiPartParserError, 'Invalid boundary in multipart: None'):
request.POST
def test_multipart_non_ascii_content_type(self):
request = WSGIRequest({
'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': 'multipart/form-data; boundary = \xe0',
'CONTENT_LENGTH': 0,
'wsgi.input': FakePayload(),
})
msg = 'Invalid non-ASCII Content-Type in multipart: multipart/form-data; boundary = à'
with self.assertRaisesMessage(MultiPartParserError, msg):
request.POST
def test_POST_connection_error(self):
"""
If wsgi.input.read() raises an exception while trying to read() the