diff options
author | Guido van Rossum <guido@python.org> | 2016-01-06 18:35:30 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2016-01-06 18:35:30 (GMT) |
commit | 520f297eb4d85a99bee8a22d60c4139b8a443d94 (patch) | |
tree | 1918ea6e2adf104c73a10c90b57ed1f12faef6e0 /Lib/test/test_pathlib.py | |
parent | d54377d2cabe6a2057468136ba1f29f48d1b47b7 (diff) | |
parent | 69bfb15bd8cb87dd07f1cf6c53f78b399c7ef937 (diff) | |
download | cpython-520f297eb4d85a99bee8a22d60c4139b8a443d94.zip cpython-520f297eb4d85a99bee8a22d60c4139b8a443d94.tar.gz cpython-520f297eb4d85a99bee8a22d60c4139b8a443d94.tar.bz2 |
Issue #26012: Don't traverse into symlinks for ** pattern in pathlib.Path.[r]glob(). (Merge 3.4->3.5)
Diffstat (limited to 'Lib/test/test_pathlib.py')
-rw-r--r-- | Lib/test/test_pathlib.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index be1e042..5ee22ad 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1241,7 +1241,7 @@ class _BasePathTest(object): os.symlink('non-existing', join('brokenLink')) self.dirlink('dirB', join('linkB')) self.dirlink(os.path.join('..', 'dirB'), join('dirA', 'linkC')) - # This one goes upwards but doesn't create a loop + # This one goes upwards, creating a loop self.dirlink(os.path.join('..', 'dirB'), join('dirB', 'linkD')) if os.name == 'nt': @@ -1437,6 +1437,23 @@ class _BasePathTest(object): _check(p.rglob("file*"), ["dirC/fileC", "dirC/dirD/fileD"]) _check(p.rglob("*/*"), ["dirC/dirD/fileD"]) + @with_symlinks + def test_rglob_symlink_loop(self): + # Don't get fooled by symlink loops (Issue #26012) + P = self.cls + p = P(BASE) + given = set(p.rglob('*')) + expect = {'brokenLink', + 'dirA', 'dirA/linkC', + 'dirB', 'dirB/fileB', 'dirB/linkD', + 'dirC', 'dirC/dirD', 'dirC/dirD/fileD', 'dirC/fileC', + 'dirE', + 'fileA', + 'linkA', + 'linkB', + } + self.assertEqual(given, {p / x for x in expect}) + def test_glob_dotdot(self): # ".." is not special in globs P = self.cls |