mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +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 @@ def test_urljoins(self): | ||||||
|         # 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
	
	 Senthil Kumaran
						Senthil Kumaran