From c7670ce7ccabd384da6a25650e93b1c30cde525d Mon Sep 17 00:00:00 2001 From: David Carley Date: Wed, 14 Sep 2022 03:16:26 +0000 Subject: [PATCH] Fixed a bug with filenames with non-ascii chars --- src/py/bbctrl/FileHandler.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/py/bbctrl/FileHandler.py b/src/py/bbctrl/FileHandler.py index 8e33ec1..3a77964 100644 --- a/src/py/bbctrl/FileHandler.py +++ b/src/py/bbctrl/FileHandler.py @@ -24,7 +24,10 @@ class FileHandler(bbctrl.APIHandler): filename = self.request.path.split('/')[-1] self.uploadFilename = url_unescape(filename) \ - .replace('\\', '/') \ + .encode("ascii", errors="replace") \ + .decode() \ + .replace('\\', '_') \ + .replace('/', '_') \ .replace('#', '-') \ .replace('?', '-') @@ -53,7 +56,7 @@ class FileHandler(bbctrl.APIHandler): if not os.path.exists(self.get_upload()): os.mkdir(self.get_upload()) - filename = self.get_upload(self.uploadFilename).encode('utf8') + filename = self.get_upload(self.uploadFilename) safe_remove(filename) os.link(self.uploadFile.name, filename) @@ -72,10 +75,11 @@ class FileHandler(bbctrl.APIHandler): def get(self, filename): if not filename: raise HTTPError(400, 'Missing filename') - filename = os.path.basename(filename) + + filename = os.path.basename(url_unescape(filename)) try: - with open(self.get_upload(filename).encode('utf8'), 'r') as f: + with open(self.get_upload(filename), 'r') as f: self.write(f.read()) except Exception: self.get_ctrl().state.select_file('')