diff options
author | Barney Gale <barney.gale@gmail.com> | 2022-06-03 21:33:20 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-03 21:33:20 (GMT) |
commit | f32e6b48d12834ba3bde01ec21c14da33abd26d6 (patch) | |
tree | 97b0b34ae6d7bfd73a84d40e8e9a179a27352e9a /Lib/pathlib.py | |
parent | 1a8a0ddb1c62ef9aff598e7e3e3a65cf35353932 (diff) | |
download | cpython-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.py | 2 |
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]) |