changeset: 92517:901e4e52b20a user: Senthil Kumaran date: Mon Sep 22 15:49:16 2014 +0800 files: Lib/test/test_urlparse.py Lib/urllib/parse.py Misc/NEWS description: 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. diff -r 850a62354402 -r 901e4e52b20a Lib/test/test_urlparse.py --- a/Lib/test/test_urlparse.py Mon Sep 22 00:44:17 2014 +0200 +++ b/Lib/test/test_urlparse.py Mon Sep 22 15:49:16 2014 +0800 @@ -380,6 +380,18 @@ # 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): str_cases = [ ('http://Test.python.org:5432/foo/', 'test.python.org', 5432), diff -r 850a62354402 -r 901e4e52b20a Lib/urllib/parse.py --- a/Lib/urllib/parse.py Mon Sep 22 00:44:17 2014 +0200 +++ b/Lib/urllib/parse.py Mon Sep 22 15:49:16 2014 +0800 @@ -443,6 +443,10 @@ segments = path.split('/') else: 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 = [] @@ -465,7 +469,7 @@ resolved_path.append('') return _coerce_result(urlunparse((scheme, netloc, '/'.join( - resolved_path), params, query, fragment))) + resolved_path) or '/', params, query, fragment))) def urldefrag(url): diff -r 850a62354402 -r 901e4e52b20a Misc/NEWS --- a/Misc/NEWS Mon Sep 22 00:44:17 2014 +0200 +++ b/Misc/NEWS Mon Sep 22 15:49:16 2014 +0800 @@ -137,6 +137,9 @@ 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 module. Removed trailing spaces in debugging output.