Repository navigation
pathlib.Path.glob causes OSError encountering symlinks to long filenames #87695
Description
Activity
ericfrederich commented
on Mar 17, 2021 ericfrederichmannequinMannequinAuthorMore actionsCalling pathlib.Path.glob("**/*) on a directory containing a symlink which resolves to a very long filename causes OSError.
This is completely avoidable since symlinks are not followed anyway.
In pathlib.py, the _RecursiveWildcardSelector has a method _iterate_directories which first calls entry.is_dir() prior to excluding based on entry.is_symlink().
It's the entry.is_dir() which is failing.
If the check for entry.is_symlink() were to happen first this error would be avoided.It's worth noting that on Linux "ls -l bad_link" works fine.
Also "find /some/path/containing/bad/link" works fine.
You do get an error however when running "ls bad_link"
I believe Python's glob() should act like "find" on Linux and not fail.
Because it is explicitly ignoring symlinks anyway, it has no business calling is_dir() on a symlink.I have attached a file which reproduces this problem. It's meant to be ran inside of an empty directory.
ericfrederich commented
on Mar 17, 2021 ericfrederichmannequinMannequinAuthorMore actionsI verified against all versions available for me to select.
For 3.10 I used the 3.10-rc Docker image.ericfrederich commented
on Mar 19, 2021 ericfrederichmannequinMannequinAuthorMore actionsI'm happy to create a pull request but would need some help.
Looking at that routine it has changed over time and I cannot simply create a single patch against 3.6 and have it merge cleanly into newer versions.
I'd need help explaining the process
- added 4 commits that reference this issue
on May 8, 2023 - added a commit that references this issue
on May 10, 2023 - added a commit that references this issue
on May 11, 2023 Note that this is "fixed" (the error is ignored) in 3.8+ in #79487
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
Linked PRs
pathlib.Path.glob()#104292pathlib.Path.glob()(GH-104292) #104362