mirror of
				https://github.com/python/cpython.git
				synced 2025-10-25 18:54:53 +00:00 
			
		
		
		
	Issue #23146: Fix mishandling of absolute Windows paths with forward slashes in pathlib.
Detected and fixed by Serhiy.
This commit is contained in:
		
						commit
						2d07b85585
					
				
					 3 changed files with 27 additions and 16 deletions
				
			
		|  | @ -102,31 +102,35 @@ def test_parse_parts(self): | |||
|         check = self._check_parse_parts | ||||
|         # First part is anchored | ||||
|         check(['c:'],                   ('c:', '', ['c:'])) | ||||
|         check(['c:\\'],                 ('c:', '\\', ['c:\\'])) | ||||
|         check(['\\'],                   ('', '\\', ['\\'])) | ||||
|         check(['c:/'],                  ('c:', '\\', ['c:\\'])) | ||||
|         check(['/'],                    ('', '\\', ['\\'])) | ||||
|         check(['c:a'],                  ('c:', '', ['c:', 'a'])) | ||||
|         check(['c:\\a'],                ('c:', '\\', ['c:\\', 'a'])) | ||||
|         check(['\\a'],                  ('', '\\', ['\\', 'a'])) | ||||
|         check(['c:/a'],                 ('c:', '\\', ['c:\\', 'a'])) | ||||
|         check(['/a'],                   ('', '\\', ['\\', 'a'])) | ||||
|         # UNC paths | ||||
|         check(['\\\\a\\b'],             ('\\\\a\\b', '\\', ['\\\\a\\b\\'])) | ||||
|         check(['\\\\a\\b\\'],           ('\\\\a\\b', '\\', ['\\\\a\\b\\'])) | ||||
|         check(['\\\\a\\b\\c'],          ('\\\\a\\b', '\\', ['\\\\a\\b\\', 'c'])) | ||||
|         check(['//a/b'],                ('\\\\a\\b', '\\', ['\\\\a\\b\\'])) | ||||
|         check(['//a/b/'],               ('\\\\a\\b', '\\', ['\\\\a\\b\\'])) | ||||
|         check(['//a/b/c'],              ('\\\\a\\b', '\\', ['\\\\a\\b\\', 'c'])) | ||||
|         # Second part is anchored, so that the first part is ignored | ||||
|         check(['a', 'Z:b', 'c'],        ('Z:', '', ['Z:', 'b', 'c'])) | ||||
|         check(['a', 'Z:\\b', 'c'],      ('Z:', '\\', ['Z:\\', 'b', 'c'])) | ||||
|         check(['a', '\\b', 'c'],        ('', '\\', ['\\', 'b', 'c'])) | ||||
|         check(['a', 'Z:/b', 'c'],       ('Z:', '\\', ['Z:\\', 'b', 'c'])) | ||||
|         # UNC paths | ||||
|         check(['a', '\\\\b\\c', 'd'],   ('\\\\b\\c', '\\', ['\\\\b\\c\\', 'd'])) | ||||
|         check(['a', '//b/c', 'd'],      ('\\\\b\\c', '\\', ['\\\\b\\c\\', 'd'])) | ||||
|         # Collapsing and stripping excess slashes | ||||
|         check(['a', 'Z:\\\\b\\\\c\\', 'd\\'], ('Z:', '\\', ['Z:\\', 'b', 'c', 'd'])) | ||||
|         check(['a', 'Z://b//c/', 'd/'], ('Z:', '\\', ['Z:\\', 'b', 'c', 'd'])) | ||||
|         # UNC paths | ||||
|         check(['a', '\\\\b\\c\\\\', 'd'], ('\\\\b\\c', '\\', ['\\\\b\\c\\', 'd'])) | ||||
|         check(['a', '//b/c//', 'd'],    ('\\\\b\\c', '\\', ['\\\\b\\c\\', 'd'])) | ||||
|         # Extended paths | ||||
|         check(['\\\\?\\c:\\'],          ('\\\\?\\c:', '\\', ['\\\\?\\c:\\'])) | ||||
|         check(['\\\\?\\c:\\a'],         ('\\\\?\\c:', '\\', ['\\\\?\\c:\\', 'a'])) | ||||
|         check(['//?/c:/'],              ('\\\\?\\c:', '\\', ['\\\\?\\c:\\'])) | ||||
|         check(['//?/c:/a'],             ('\\\\?\\c:', '\\', ['\\\\?\\c:\\', 'a'])) | ||||
|         check(['//?/c:/a', '/b'],       ('\\\\?\\c:', '\\', ['\\\\?\\c:\\', 'b'])) | ||||
|         # Extended UNC paths (format is "\\?\UNC\server\share") | ||||
|         check(['\\\\?\\UNC\\b\\c'],     ('\\\\?\\UNC\\b\\c', '\\', ['\\\\?\\UNC\\b\\c\\'])) | ||||
|         check(['\\\\?\\UNC\\b\\c\\d'],  ('\\\\?\\UNC\\b\\c', '\\', ['\\\\?\\UNC\\b\\c\\', 'd'])) | ||||
|         check(['//?/UNC/b/c'],          ('\\\\?\\UNC\\b\\c', '\\', ['\\\\?\\UNC\\b\\c\\'])) | ||||
|         check(['//?/UNC/b/c/d'],        ('\\\\?\\UNC\\b\\c', '\\', ['\\\\?\\UNC\\b\\c\\', 'd'])) | ||||
|         # Second part has a root but not drive | ||||
|         check(['a', '/b', 'c'],         ('', '\\', ['\\', 'b', 'c'])) | ||||
|         check(['Z:/a', '/b', 'c'],      ('Z:', '\\', ['Z:\\', 'b', 'c'])) | ||||
|         check(['//?/Z:/a', '/b', 'c'],  ('\\\\?\\Z:', '\\', ['\\\\?\\Z:\\', 'b', 'c'])) | ||||
| 
 | ||||
|     def test_splitroot(self): | ||||
|         f = self.flavour.splitroot | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Antoine Pitrou
						Antoine Pitrou