summaryrefslogtreecommitdiffstats
path: root/Lib/pathlib.py
diff options
context:
space:
mode:
authorBarney Gale <barney.gale@gmail.com>2022-06-03 21:33:20 (GMT)
committerGitHub <noreply@github.com>2022-06-03 21:33:20 (GMT)
commitf32e6b48d12834ba3bde01ec21c14da33abd26d6 (patch)
tree97b0b34ae6d7bfd73a84d40e8e9a179a27352e9a /Lib/pathlib.py
parent1a8a0ddb1c62ef9aff598e7e3e3a65cf35353932 (diff)
downloadcpython-f32e6b48d12834ba3bde01ec21c14da33abd26d6.zip
cpython-f32e6b48d12834ba3bde01ec21c14da33abd26d6.tar.gz
cpython-f32e6b48d12834ba3bde01ec21c14da33abd26d6.tar.bz2
gh-93156 - fix negative indexing into absolute `pathlib.PurePath().parents` (GH-93273)
When a `_PathParents` object has a drive or a root, the length of the object is *one less* than than the length of `self._parts`, which resulted in an off-by-one error when `path.parents[-n]` was fed through to `self._parts[:-n - 1]`. In particular, `path.parents[-1]` was a malformed path object with spooky properties. This is addressed by adding `len(self)` to negative indices.
Diffstat (limited to 'Lib/pathlib.py')
-rw-r--r--Lib/pathlib.py2
1 files changed, 2 insertions, 0 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index c608ba0..26da4ed 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -443,6 +443,8 @@ class _PathParents(Sequence):
if idx >= len(self) or idx < -len(self):
raise IndexError(idx)
+ if idx < 0:
+ idx += len(self)
return self._pathcls._from_parsed_parts(self._drv, self._root,
self._parts[:-idx - 1])