From 650c33b18b159e75a4bf43c341b4aae049ea26ef Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 17 Dec 2019 21:18:41 +0100 Subject: dash_server: implement percent-encoded non-ASCII paths --- dash_server.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dash_server.py b/dash_server.py index c39b74e..da65584 100755 --- a/dash_server.py +++ b/dash_server.py @@ -31,6 +31,7 @@ import shutil import socket import sys import threading +from urllib import parse as urlparse # monkey-patch in ThreadingHTTPServer for older python versions if sys.version_info.minor < 7: @@ -187,8 +188,7 @@ class DashRequestHandler(hs.BaseHTTPRequestHandler): super().__init__(*args, **kwargs) def _decode_path(self, encoded_path): - # FIXME implement unquoting - return encoded_path + return urlparse.unquote_to_bytes(encoded_path) def _serve_local(self, path): with open(path, 'rb') as infile: @@ -208,7 +208,7 @@ class DashRequestHandler(hs.BaseHTTPRequestHandler): self._log_request() local_path = self._decode_path(self.path) - outpath = '%s/%s' % (self.server.serve_dir, local_path) + outpath = b'/'.join((self.server.serve_dir, local_path)) try: ds = self.server._streams[local_path] except KeyError: @@ -257,8 +257,8 @@ class DashRequestHandler(hs.BaseHTTPRequestHandler): else: return self.send_error(HTTPStatus.BAD_REQUEST) - outpath = '%s/%s' % (self.server.serve_dir, local_path) - write_path = outpath + '.tmp' + outpath = b'/'.join((self.server.serve_dir, local_path)) + write_path = outpath + b'.tmp' outfile = stack.enter_context(open(write_path, 'wb')) while True: data = infile.read() @@ -338,7 +338,7 @@ def main(argv): logger = logging.getLogger('DashServer') server = DashServer((args.address, args.port), args.ipv4, args.ipv6, - args.directory, logger) + os.fsencode(args.directory), logger) server.serve_forever() if __name__ == '__main__': -- cgit v1.2.3