Kaydet (Commit) 73030df7 authored tarafından Victor Stinner's avatar Victor Stinner

Fix os._DummyDirEntry.is_symlink()

Issue #25911: Fix os._DummyDirEntry.is_symlink(), don't follow symbolic links:
use os.stat(path, follow_symlinks=False).
üst 80ec58c4
...@@ -452,22 +452,33 @@ class _DummyDirEntry: ...@@ -452,22 +452,33 @@ class _DummyDirEntry:
# Mimick FindFirstFile/FindNextFile: we should get file attributes # Mimick FindFirstFile/FindNextFile: we should get file attributes
# while iterating on a directory # while iterating on a directory
self._stat = None self._stat = None
self._lstat = None
try: try:
self.stat() self.stat(follow_symlinks=False)
except OSError: except OSError:
pass pass
def stat(self): def stat(self, *, follow_symlinks=True):
if self._stat is None: if follow_symlinks:
self._stat = stat(self.path) if self._stat is None:
return self._stat self._stat = stat(self.path)
return self._stat
else:
if self._lstat is None:
self._lstat = stat(self.path, follow_symlinks=False)
return self._lstat
def is_dir(self): def is_dir(self):
if self._lstat is not None and not self.is_symlink():
# use the cache lstat
stat = self.stat(follow_symlinks=False)
return st.S_ISDIR(stat.st_mode)
stat = self.stat() stat = self.stat()
return st.S_ISDIR(stat.st_mode) return st.S_ISDIR(stat.st_mode)
def is_symlink(self): def is_symlink(self):
stat = self.stat() stat = self.stat(follow_symlinks=False)
return st.S_ISLNK(stat.st_mode) return st.S_ISLNK(stat.st_mode)
class _dummy_scandir: class _dummy_scandir:
......
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