mirror of https://github.com/python/cpython
GH-87695: Fix OSError from `pathlib.Path.glob()` (GH-104292)
Fix issue where `pathlib.Path.glob()` raised `OSError` when it encountered a symlink to an overly long path.
This commit is contained in:
parent
7a3b03509e
commit
a33ce66dca
|
@ -178,11 +178,11 @@ class _RecursiveWildcardSelector(_Selector):
|
|||
for entry in entries:
|
||||
entry_is_dir = False
|
||||
try:
|
||||
entry_is_dir = entry.is_dir()
|
||||
entry_is_dir = entry.is_dir(follow_symlinks=False)
|
||||
except OSError as e:
|
||||
if not _ignore_error(e):
|
||||
raise
|
||||
if entry_is_dir and not entry.is_symlink():
|
||||
if entry_is_dir:
|
||||
path = parent_path._make_child_relpath(entry.name)
|
||||
for p in self._iterate_directories(path, scandir):
|
||||
yield p
|
||||
|
|
|
@ -1977,6 +1977,15 @@ class _BasePathTest(object):
|
|||
subdir.chmod(000)
|
||||
self.assertEqual(len(set(base.glob("*"))), 4)
|
||||
|
||||
@os_helper.skip_unless_symlink
|
||||
def test_glob_long_symlink(self):
|
||||
# See gh-87695
|
||||
base = self.cls(BASE) / 'long_symlink'
|
||||
base.mkdir()
|
||||
bad_link = base / 'bad_link'
|
||||
bad_link.symlink_to("bad" * 200)
|
||||
self.assertEqual(sorted(base.glob('**/*')), [bad_link])
|
||||
|
||||
def _check_resolve(self, p, expected, strict=True):
|
||||
q = p.resolve(strict)
|
||||
self.assertEqual(q, expected)
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix issue where :meth:`pathlib.Path.glob` raised :exc:`OSError` when it
|
||||
encountered a symlink to an overly long path.
|
Loading…
Reference in New Issue