diff options
author | Erik Johnston <erik@matrix.org> | 2015-08-27 10:48:58 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-08-27 10:48:58 +0100 |
commit | 66ec6cf9b892cd22dd75d9b66f10b120ebe233ed (patch) | |
tree | 4063865a37d5bf2febe89b8de6a9402fa0a2e104 /synapse/rest/media/v1 | |
parent | None check the correct variable (diff) | |
download | synapse-66ec6cf9b892cd22dd75d9b66f10b120ebe233ed.tar.xz |
Check for an internationalised filename first
Diffstat (limited to 'synapse/rest/media/v1')
-rw-r--r-- | synapse/rest/media/v1/base_resource.py | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/synapse/rest/media/v1/base_resource.py b/synapse/rest/media/v1/base_resource.py index 610cb3ef82..03ebbbefe9 100644 --- a/synapse/rest/media/v1/base_resource.py +++ b/synapse/rest/media/v1/base_resource.py @@ -145,14 +145,20 @@ class BaseMediaResource(Resource): content_disposition = headers.get("Content-Disposition", None) if content_disposition: _, params = cgi.parse_header(content_disposition[0],) - upload_name = params.get("filename", None) - if upload_name and not is_ascii(upload_name): - upload_name = None - else: - upload_name_utf8 = params.get("filename*", None) - if upload_name_utf8: - if upload_name_utf8.lower().startswith("utf-8''"): - upload_name = upload_name_utf8[7:] + upload_name = None + + # First check if there is a valid UTF-8 filename + upload_name_utf8 = params.get("filename*", None) + if upload_name_utf8: + if upload_name_utf8.lower().startswith("utf-8''"): + upload_name = upload_name_utf8[7:] + + # If there isn't check for an ascii name. + if not upload_name: + upload_name = params.get("filename", None) + if upload_name and not is_ascii(upload_name): + upload_name = None + if upload_name: upload_name = urlparse.unquote(upload_name) try: |