aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Bittel2014-09-05 15:22:43 -0700
committerJason Bittel2014-09-05 15:22:43 -0700
commitc8e475023c527f3ad22258c4ae0e0b5d992cb98b (patch)
treeaa322504ae8aa8e99e05fdff77ee323874634393
parentbcd8a24db1d7022cac3d11641c563f0bfdbb8e97 (diff)
downloaddjango-rest-framework-c8e475023c527f3ad22258c4ae0e0b5d992cb98b.tar.bz2
Fix encoded filename parsing to allow for lang
-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')