aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rest_framework/parsers.py2
-rw-r--r--tests/test_parsers.py4
2 files changed, 5 insertions, 1 deletions
diff --git a/rest_framework/parsers.py b/rest_framework/parsers.py
index 82caa6f6..161bc809 100644
--- a/rest_framework/parsers.py
+++ b/rest_framework/parsers.py
@@ -303,7 +303,7 @@ class FileUploadParser(BaseParser):
"""
encoded_filename = force_text(disposition['filename*'])
try:
- charset, filename = encoded_filename.split('\'\'', 1)
+ charset, lang, filename = encoded_filename.split('\'', 2)
filename = urlparse.unquote(filename)
except (ValueError, LookupError):
filename = force_text(disposition['filename'])
diff --git a/tests/test_parsers.py b/tests/test_parsers.py
index d19b4651..bc84f1c7 100644
--- a/tests/test_parsers.py
+++ b/tests/test_parsers.py
@@ -127,6 +127,10 @@ class TestFileUploadParser(TestCase):
filename = parser.get_filename(self.stream, None, self.parser_context)
self.assertEqual(filename, 'ÀĥƦ.txt')
+ self.__replace_content_disposition('inline; filename=fallback.txt; filename*=utf-8\'en-us\'ÀĥƦ.txt')
+ filename = parser.get_filename(self.stream, None, self.parser_context)
+ self.assertEqual(filename, 'ÀĥƦ.txt')
+
self.__replace_content_disposition('inline; filename=fallback.txt; filename*=utf-8--ÀĥƦ.txt')
filename = parser.get_filename(self.stream, None, self.parser_context)
self.assertEqual(filename, 'fallback.txt')