diff options
author | dirkf <fieldhouse@gmx.net> | 2023-07-28 06:19:15 +0100 |
---|---|---|
committer | dirkf <fieldhouse@gmx.net> | 2023-07-29 14:27:26 +0100 |
commit | abef53466da1f7d2e79f5644718a2cf7524abc49 (patch) | |
tree | c0372d8e3f987a49b793372a8f75c58dd55ca6b4 /test/test_http.py | |
parent | e7926ae9f4e5fa258696551a39295402819280c9 (diff) |
[utils] Rework URL path munging for ., .. components
* move processing to YoutubeDLHandler
* also process `Location` header for redirect
* use tests from https://github.com/yt-dlp/yt-dlp/pull/7662
Diffstat (limited to 'test/test_http.py')
-rw-r--r-- | test/test_http.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/test/test_http.py b/test/test_http.py index 793bea359..485c4c6fc 100644 --- a/test/test_http.py +++ b/test/test_http.py @@ -180,6 +180,12 @@ class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler): respond() elif self.path == '/%c7%9f': respond() + elif self.path == '/redirect_dotsegments': + self.send_response(301) + # redirect to /headers but with dot segments before + self.send_header('Location', '/a/b/./../../headers') + self.send_header('Content-Length', '0') + self.end_headers() elif self.path.startswith('/redirect_'): self._redirect() elif self.path.startswith('/method'): @@ -489,6 +495,14 @@ class TestHTTP(unittest.TestCase): self.assertEqual(res.headers.get('Content-Encoding'), 'unsupported') self.assertEqual(res.read(), b'raw') + def test_remove_dot_segments(self): + with FakeYDL() as ydl: + res = ydl.urlopen(sanitized_Request(self._test_url('a/b/./../../headers'))) + self.assertEqual(compat_urllib_parse.urlparse(res.geturl()).path, '/headers') + + res = ydl.urlopen(sanitized_Request(self._test_url('redirect_dotsegments'))) + self.assertEqual(compat_urllib_parse.urlparse(res.geturl()).path, '/headers') + def _build_proxy_handler(name): class HTTPTestRequestHandler(compat_http_server.BaseHTTPRequestHandler): |