Commit 3c331bb7 authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #16626: Fix infinite recursion in glob.glob() on Windows when the...

Issue #16626: Fix infinite recursion in glob.glob() on Windows when the pattern contains a wildcard in the drive or UNC path.
Patch by Serhiy Storchaka.
parents 9ca58933 3d068b2e
...@@ -29,7 +29,10 @@ def iglob(pathname): ...@@ -29,7 +29,10 @@ def iglob(pathname):
for name in glob1(None, basename): for name in glob1(None, basename):
yield name yield name
return return
if has_magic(dirname): # `os.path.split()` returns the argument itself as a dirname if it is a
# drive or UNC path. Prevent an infinite recursion if a drive or UNC path
# contains magic characters (i.e. r'\\?\C:').
if dirname != pathname and has_magic(dirname):
dirs = iglob(dirname) dirs = iglob(dirname)
else: else:
dirs = [dirname] dirs = [dirname]
......
...@@ -4,6 +4,7 @@ from test.support import (run_unittest, TESTFN, skip_unless_symlink, ...@@ -4,6 +4,7 @@ from test.support import (run_unittest, TESTFN, skip_unless_symlink,
import glob import glob
import os import os
import shutil import shutil
import sys
class GlobTests(unittest.TestCase): class GlobTests(unittest.TestCase):
...@@ -110,6 +111,18 @@ class GlobTests(unittest.TestCase): ...@@ -110,6 +111,18 @@ class GlobTests(unittest.TestCase):
eq(self.glob('sym1'), [self.norm('sym1')]) eq(self.glob('sym1'), [self.norm('sym1')])
eq(self.glob('sym2'), [self.norm('sym2')]) eq(self.glob('sym2'), [self.norm('sym2')])
@unittest.skipUnless(sys.platform == "win32", "Win32 specific test")
def test_glob_magic_in_drive(self):
eq = self.assertSequencesEqual_noorder
eq(glob.glob('*:'), [])
eq(glob.glob(b'*:'), [])
eq(glob.glob('?:'), [])
eq(glob.glob(b'?:'), [])
eq(glob.glob('\\\\?\\c:\\'), ['\\\\?\\c:\\'])
eq(glob.glob(b'\\\\?\\c:\\'), [b'\\\\?\\c:\\'])
eq(glob.glob('\\\\*\\*\\'), [])
eq(glob.glob(b'\\\\*\\*\\'), [])
def test_main(): def test_main():
run_unittest(GlobTests) run_unittest(GlobTests)
......
...@@ -108,6 +108,10 @@ Core and Builtins ...@@ -108,6 +108,10 @@ Core and Builtins
Library Library
------- -------
- Issue #16626: Fix infinite recursion in glob.glob() on Windows when the
pattern contains a wildcard in the drive or UNC path. Patch by Serhiy
Storchaka.
- Issue #15783: Except for the number methods, the C version of decimal now - Issue #15783: Except for the number methods, the C version of decimal now
supports all None default values present in decimal.py. These values were supports all None default values present in decimal.py. These values were
largely undocumented. largely undocumented.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment