diff options
author | Anton Khirnov <anton@khirnov.net> | 2019-12-17 21:18:41 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2019-12-17 21:18:41 +0100 |
commit | 650c33b18b159e75a4bf43c341b4aae049ea26ef (patch) | |
tree | a2ca3021d5f8b9dd5e8a5e2d38a1c7382adcee1f | |
parent | afddf90fa0a06aefe3dc9e51e8deeba7744a3e0e (diff) |
dash_server: implement percent-encoded non-ASCII paths
-rwxr-xr-x | dash_server.py | 12 |
1 files 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__': |