Commit f1ac9d3f by Tom Christie

More graceful handling of malformed Content-Disposition

parent 4cb164b6
...@@ -298,7 +298,7 @@ class FileUploadParser(BaseParser): ...@@ -298,7 +298,7 @@ class FileUploadParser(BaseParser):
if 'filename*' in filename_parm: if 'filename*' in filename_parm:
return self.get_encoded_filename(filename_parm) return self.get_encoded_filename(filename_parm)
return force_text(filename_parm['filename']) return force_text(filename_parm['filename'])
except (AttributeError, KeyError): except (AttributeError, KeyError, ValueError):
pass pass
def get_encoded_filename(self, filename_parm): def get_encoded_filename(self, filename_parm):
......
...@@ -161,7 +161,9 @@ class TestFileUploadParser(TestCase): ...@@ -161,7 +161,9 @@ class TestFileUploadParser(TestCase):
self.__replace_content_disposition('inline; filename=fallback.txt; filename*=utf-8--ÀĥƦ.txt') self.__replace_content_disposition('inline; filename=fallback.txt; filename*=utf-8--ÀĥƦ.txt')
filename = parser.get_filename(self.stream, None, self.parser_context) filename = parser.get_filename(self.stream, None, self.parser_context)
self.assertEqual(filename, 'fallback.txt') # Malformed. Either None or 'fallback.txt' will be acceptable.
# See also https://code.djangoproject.com/ticket/24209
self.assertIn(filename, ('fallback.txt', None))
def __replace_content_disposition(self, disposition): def __replace_content_disposition(self, disposition):
self.parser_context['request'].META['HTTP_CONTENT_DISPOSITION'] = disposition self.parser_context['request'].META['HTTP_CONTENT_DISPOSITION'] = disposition
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