app: content disposition fix for file names containing commas

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2022-01-27 17:44:01 -05:00
parent 7fcd84bbe4
commit 04477705b0
1 changed files with 5 additions and 3 deletions

View File

@ -654,8 +654,9 @@ class FileRequestHandler(AuthorizedFileHandler):
ascii_basename = self._escape_filename_to_ascii(basename) ascii_basename = self._escape_filename_to_ascii(basename)
utf8_basename = self._escape_filename_to_utf8(basename) utf8_basename = self._escape_filename_to_utf8(basename)
self.set_header( self.set_header(
"Content-Disposition", f"attachment; filename={ascii_basename}; " "Content-Disposition",
f"filename*=UTF-8\'\'{utf8_basename}") f"attachment; filename=\"{ascii_basename}\"; "
f"filename*=UTF-8\'\'{utf8_basename}")
async def delete(self, path: str) -> None: async def delete(self, path: str) -> None:
path = self.request.path.lstrip("/").split("/", 2)[-1] path = self.request.path.lstrip("/").split("/", 2)[-1]
@ -760,7 +761,8 @@ class FileRequestHandler(AuthorizedFileHandler):
assert self.request.method == "HEAD" assert self.request.method == "HEAD"
def _escape_filename_to_ascii(self, basename: str) -> str: def _escape_filename_to_ascii(self, basename: str) -> str:
return basename.encode("ascii", "replace").decode() ret = basename.encode("ascii", "replace").decode()
return ret.replace('"', '\\"')
def _escape_filename_to_utf8(self, basename: str) -> str: def _escape_filename_to_utf8(self, basename: str) -> str:
return urllib.parse.quote(basename, encoding="utf-8") return urllib.parse.quote(basename, encoding="utf-8")