mirror of
https://github.com/python/cpython.git
synced 2025-09-19 07:00:59 +00:00
Issue #22278: Fix urljoin problem with relative urls, a regression observed
after changes to issue22118 were submitted. Patch contributed by Demian Brecht and reviewed by Antoine Pitrou.
This commit is contained in:
parent
e6c27c9f6b
commit
a66e3885fb
3 changed files with 20 additions and 1 deletions
|
@ -380,6 +380,18 @@ class UrlParseTestCase(unittest.TestCase):
|
||||||
# self.checkJoin(SIMPLE_BASE, '../../../g','http://a/../g')
|
# self.checkJoin(SIMPLE_BASE, '../../../g','http://a/../g')
|
||||||
# self.checkJoin(SIMPLE_BASE, '/./g','http://a/./g')
|
# self.checkJoin(SIMPLE_BASE, '/./g','http://a/./g')
|
||||||
|
|
||||||
|
# test for issue22118 duplicate slashes
|
||||||
|
self.checkJoin(SIMPLE_BASE + '/', 'foo', SIMPLE_BASE + '/foo')
|
||||||
|
|
||||||
|
# Non-RFC-defined tests, covering variations of base and trailing
|
||||||
|
# slashes
|
||||||
|
self.checkJoin('http://a/b/c/d/e/', '../../f/g/', 'http://a/b/c/f/g/')
|
||||||
|
self.checkJoin('http://a/b/c/d/e', '../../f/g/', 'http://a/b/f/g/')
|
||||||
|
self.checkJoin('http://a/b/c/d/e/', '/../../f/g/', 'http://a/f/g/')
|
||||||
|
self.checkJoin('http://a/b/c/d/e', '/../../f/g/', 'http://a/f/g/')
|
||||||
|
self.checkJoin('http://a/b/c/d/e/', '../../f/g', 'http://a/b/c/f/g')
|
||||||
|
self.checkJoin('http://a/b/', '../../f/g/', 'http://a/f/g/')
|
||||||
|
|
||||||
def test_RFC2732(self):
|
def test_RFC2732(self):
|
||||||
str_cases = [
|
str_cases = [
|
||||||
('http://Test.python.org:5432/foo/', 'test.python.org', 5432),
|
('http://Test.python.org:5432/foo/', 'test.python.org', 5432),
|
||||||
|
|
|
@ -443,6 +443,10 @@ def urljoin(base, url, allow_fragments=True):
|
||||||
segments = path.split('/')
|
segments = path.split('/')
|
||||||
else:
|
else:
|
||||||
segments = base_parts + path.split('/')
|
segments = base_parts + path.split('/')
|
||||||
|
# filter out elements that would cause redundant slashes on re-joining
|
||||||
|
# the resolved_path
|
||||||
|
segments = segments[0:1] + [
|
||||||
|
s for s in segments[1:-1] if len(s) > 0] + segments[-1:]
|
||||||
|
|
||||||
resolved_path = []
|
resolved_path = []
|
||||||
|
|
||||||
|
@ -465,7 +469,7 @@ def urljoin(base, url, allow_fragments=True):
|
||||||
resolved_path.append('')
|
resolved_path.append('')
|
||||||
|
|
||||||
return _coerce_result(urlunparse((scheme, netloc, '/'.join(
|
return _coerce_result(urlunparse((scheme, netloc, '/'.join(
|
||||||
resolved_path), params, query, fragment)))
|
resolved_path) or '/', params, query, fragment)))
|
||||||
|
|
||||||
|
|
||||||
def urldefrag(url):
|
def urldefrag(url):
|
||||||
|
|
|
@ -137,6 +137,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #22278: Fix urljoin problem with relative urls, a regression observed
|
||||||
|
after changes to issue22118 were submitted.
|
||||||
|
|
||||||
- Issue #22415: Fixed debugging output of the GROUPREF_EXISTS opcode in the re
|
- Issue #22415: Fixed debugging output of the GROUPREF_EXISTS opcode in the re
|
||||||
module. Removed trailing spaces in debugging output.
|
module. Removed trailing spaces in debugging output.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue