Kaydet (Commit) 8ec7ded3 authored tarafından Tim Graham's avatar Tim Graham

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

üst 2ed2acf8
...@@ -67,7 +67,10 @@ class MultiPartParser: ...@@ -67,7 +67,10 @@ class MultiPartParser:
raise MultiPartParserError('Invalid Content-Type: %s' % content_type) raise MultiPartParserError('Invalid Content-Type: %s' % content_type)
# Parse the header to get the boundary to split the parts. # 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') boundary = opts.get('boundary')
if not boundary or not cgi.valid_boundary(boundary): if not boundary or not cgi.valid_boundary(boundary):
raise MultiPartParserError('Invalid boundary in multipart: %s' % force_str(boundary)) raise MultiPartParserError('Invalid boundary in multipart: %s' % force_str(boundary))
......
...@@ -487,6 +487,17 @@ class RequestsTests(SimpleTestCase): ...@@ -487,6 +487,17 @@ class RequestsTests(SimpleTestCase):
with self.assertRaisesMessage(MultiPartParserError, 'Invalid boundary in multipart: None'): with self.assertRaisesMessage(MultiPartParserError, 'Invalid boundary in multipart: None'):
request.POST 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): def test_POST_connection_error(self):
""" """
If wsgi.input.read() raises an exception while trying to read() the If wsgi.input.read() raises an exception while trying to read() the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment