[utils] Process bytestrings in urljoin (closes #12369)
This commit is contained in:
parent
96182695e4
commit
4b5de77bdb
@ -455,6 +455,9 @@ class TestUtil(unittest.TestCase):
|
|||||||
|
|
||||||
def test_urljoin(self):
|
def test_urljoin(self):
|
||||||
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(b'http://foo.de/', '/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
|
||||||
|
self.assertEqual(urljoin('http://foo.de/', b'/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
|
||||||
|
self.assertEqual(urljoin(b'http://foo.de/', b'/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('//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', '/a/b/c.txt'), 'http://foo.de/a/b/c.txt')
|
||||||
|
@ -1748,11 +1748,16 @@ def base_url(url):
|
|||||||
|
|
||||||
|
|
||||||
def urljoin(base, path):
|
def urljoin(base, path):
|
||||||
|
if isinstance(path, bytes):
|
||||||
|
path = path.decode('utf-8')
|
||||||
if not isinstance(path, compat_str) or not path:
|
if not isinstance(path, compat_str) or not path:
|
||||||
return None
|
return None
|
||||||
if re.match(r'^(?:https?:)?//', path):
|
if re.match(r'^(?:https?:)?//', path):
|
||||||
return path
|
return path
|
||||||
if not isinstance(base, compat_str) or not re.match(r'^(?:https?:)?//', base):
|
if isinstance(base, bytes):
|
||||||
|
base = base.decode('utf-8')
|
||||||
|
if not isinstance(base, compat_str) or not re.match(
|
||||||
|
r'^(?:https?:)?//', base):
|
||||||
return None
|
return None
|
||||||
return compat_urlparse.urljoin(base, path)
|
return compat_urlparse.urljoin(base, path)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user