diff options
author | Barney Gale <barney.gale@gmail.com> | 2024-05-29 20:11:30 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-29 20:11:30 (GMT) |
commit | a150679f90c6e3f017bd75cac3b8f727063cc4aa (patch) | |
tree | 17d152ca472436d050151412711e0981dd2a6c05 /Lib/test/test_shutil.py | |
parent | c22323cd1c200ca1b22c47af95f67c4b2d661fe7 (diff) | |
download | cpython-a150679f90c6e3f017bd75cac3b8f727063cc4aa.zip cpython-a150679f90c6e3f017bd75cac3b8f727063cc4aa.tar.gz cpython-a150679f90c6e3f017bd75cac3b8f727063cc4aa.tar.bz2 |
GH-89727: Partially fix `shutil.rmtree()` recursion error on deep trees (#119634)
Make `shutil._rmtree_unsafe()` call `os.walk()`, which is implemented
without recursion.
`shutil._rmtree_safe_fd()` is not affected and can still raise a recursion
error.
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Diffstat (limited to 'Lib/test/test_shutil.py')
-rw-r--r-- | Lib/test/test_shutil.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index df9e7a6..01f1390 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -741,6 +741,17 @@ class TestRmTree(BaseTest, unittest.TestCase): shutil.rmtree(TESTFN) raise + @unittest.skipIf(shutil._use_fd_functions, "fd-based functions remain unfixed (GH-89727)") + def test_rmtree_above_recursion_limit(self): + recursion_limit = 40 + # directory_depth > recursion_limit + directory_depth = recursion_limit + 10 + base = os.path.join(TESTFN, *(['d'] * directory_depth)) + os.makedirs(base) + + with support.infinite_recursion(recursion_limit): + shutil.rmtree(TESTFN) + class TestCopyTree(BaseTest, unittest.TestCase): |