[utils] Improve urljoin
authorSergey M․ <dstftw@gmail.com>
Sat, 17 Dec 2016 11:44:53 +0000 (18:44 +0700)
committerSergey M․ <dstftw@gmail.com>
Sat, 17 Dec 2016 11:49:55 +0000 (18:49 +0700)
test/test_utils.py
youtube_dl/utils.py

index 3f45b0bd1fa56c908cb1870343481ffe31e87fb9..1cdac82fc4ff9892033e09d07c6a1a6c64d9c852 100644 (file)
@@ -448,11 +448,14 @@ class TestUtil(unittest.TestCase):
 
     def test_urljoin(self):
         self.assertEqual(urljoin('http://foo.de/', '/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
+        self.assertEqual(urljoin('//foo.de/', '/a/b/c.txt'), '//foo.de/a/b/c.txt')
         self.assertEqual(urljoin('http://foo.de/', 'a/b/c.txt'), 'http://foo.de/a/b/c.txt')
         self.assertEqual(urljoin('http://foo.de', '/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
         self.assertEqual(urljoin('http://foo.de', 'a/b/c.txt'), 'http://foo.de/a/b/c.txt')
         self.assertEqual(urljoin('http://foo.de/', 'http://foo.de/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
+        self.assertEqual(urljoin('http://foo.de/', '//foo.de/a/b/c.txt'), '//foo.de/a/b/c.txt')
         self.assertEqual(urljoin(None, 'http://foo.de/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
+        self.assertEqual(urljoin(None, '//foo.de/a/b/c.txt'), '//foo.de/a/b/c.txt')
         self.assertEqual(urljoin('', 'http://foo.de/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
         self.assertEqual(urljoin(['foobar'], 'http://foo.de/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
         self.assertEqual(urljoin('http://foo.de/', None), None)
index 694e9a600387977cd99f0af5ba63e87d26ba0f5e..528d87bb9d9d1bc542ff6310d74815cc2e801113 100644 (file)
@@ -1703,9 +1703,9 @@ def base_url(url):
 def urljoin(base, path):
     if not isinstance(path, compat_str) or not path:
         return None
-    if re.match(r'https?://', path):
+    if re.match(r'^(?:https?:)?//', path):
         return path
-    if not isinstance(base, compat_str) or not re.match(r'https?://', base):
+    if not isinstance(base, compat_str) or not re.match(r'^(?:https?:)?//', base):
         return None
     return compat_urlparse.urljoin(base, path)