Commit d0f6e0a6 authored by Hynek Schlawack's avatar Hynek Schlawack

Check for all used fd-based functions in shutil.rmdir, closes #15218

parent 0b50bf3f
......@@ -405,8 +405,10 @@ def _rmtree_safe_fd(topfd, path, onerror):
except os.error:
onerror(os.unlink, fullname, sys.exc_info())
_use_fd_functions = (os.unlink in os.supports_dir_fd and
os.open in os.supports_dir_fd)
_use_fd_functions = ({os.open, os.stat, os.unlink, os.rmdir} <=
os.supports_dir_fd and
os.listdir in os.supports_fd and
os.stat in os.supports_follow_symlinks)
def rmtree(path, ignore_errors=False, onerror=None):
"""Recursively delete a directory tree.
......
......@@ -524,7 +524,11 @@ class TestShutil(unittest.TestCase):
self.assertFalse(os.path.islink(dst))
def test_rmtree_uses_safe_fd_version_if_available(self):
if os.unlink in os.supports_dir_fd and os.open in os.supports_dir_fd:
_use_fd_functions = ({os.open, os.stat, os.unlink, os.rmdir} <=
os.supports_dir_fd and
os.listdir in os.supports_fd and
os.stat in os.supports_follow_symlinks)
if _use_fd_functions:
self.assertTrue(shutil._use_fd_functions)
self.assertTrue(shutil.rmtree.avoids_symlink_attacks)
tmp_dir = self.mkdtemp()
......
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