[Python-checkins] GH-87695: Fix OSError from `pathlib.Path.glob()` (GH-104292)
barneygale
webhook-mailer at python.org
Wed May 10 13:17:15 EDT 2023
https://github.com/python/cpython/commit/a33ce66dca57d4c36b1022fdf3b7e322f3203468
commit: a33ce66dca57d4c36b1022fdf3b7e322f3203468
branch: main
author: Barney Gale <barney.gale at gmail.com>
committer: barneygale <barney.gale at gmail.com>
date: 2023-05-10T17:17:08Z
summary:
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.
files:
A Misc/NEWS.d/next/Library/2023-05-08-15-39-00.gh-issue-87695.f6iO7v.rst
M Lib/pathlib.py
M Lib/test/test_pathlib.py
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index 20ec1ce9d803..25863c76f308 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -178,11 +178,11 @@ def _iterate_directories(self, parent_path, scandir):
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
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index ee0ef9a34c38..10dd604138a6 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -1977,6 +1977,15 @@ def my_scandir(path):
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)
diff --git a/Misc/NEWS.d/next/Library/2023-05-08-15-39-00.gh-issue-87695.f6iO7v.rst b/Misc/NEWS.d/next/Library/2023-05-08-15-39-00.gh-issue-87695.f6iO7v.rst
new file mode 100644
index 000000000000..7b677656bea3
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-05-08-15-39-00.gh-issue-87695.f6iO7v.rst
@@ -0,0 +1,2 @@
+Fix issue where :meth:`pathlib.Path.glob` raised :exc:`OSError` when it
+encountered a symlink to an overly long path.
More information about the Python-checkins
mailing list