mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Check for all used fd-based functions in shutil.rmdir, closes #15218
This commit is contained in:
parent
0b50bf3ffc
commit
d0f6e0a6e6
2 changed files with 9 additions and 3 deletions
|
@ -405,8 +405,10 @@ def _rmtree_safe_fd(topfd, path, onerror):
|
||||||
except os.error:
|
except os.error:
|
||||||
onerror(os.unlink, fullname, sys.exc_info())
|
onerror(os.unlink, fullname, sys.exc_info())
|
||||||
|
|
||||||
_use_fd_functions = (os.unlink in os.supports_dir_fd and
|
_use_fd_functions = ({os.open, os.stat, os.unlink, os.rmdir} <=
|
||||||
os.open in os.supports_dir_fd)
|
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):
|
def rmtree(path, ignore_errors=False, onerror=None):
|
||||||
"""Recursively delete a directory tree.
|
"""Recursively delete a directory tree.
|
||||||
|
|
|
@ -524,7 +524,11 @@ class TestShutil(unittest.TestCase):
|
||||||
self.assertFalse(os.path.islink(dst))
|
self.assertFalse(os.path.islink(dst))
|
||||||
|
|
||||||
def test_rmtree_uses_safe_fd_version_if_available(self):
|
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._use_fd_functions)
|
||||||
self.assertTrue(shutil.rmtree.avoids_symlink_attacks)
|
self.assertTrue(shutil.rmtree.avoids_symlink_attacks)
|
||||||
tmp_dir = self.mkdtemp()
|
tmp_dir = self.mkdtemp()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue