summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_shutil.py
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2024-05-29 20:11:30 (GMT)
committerGitHub <noreply@github.com>2024-05-29 20:11:30 (GMT)
commita150679f90c6e3f017bd75cac3b8f727063cc4aa (patch)
tree17d152ca472436d050151412711e0981dd2a6c05 /Lib/test/test_shutil.py
parentc22323cd1c200ca1b22c47af95f67c4b2d661fe7 (diff)
downloadcpython-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.py11
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):