Skip to content
Snippets Groups Projects
Commit 49fa0b31 authored by Georges Racinet's avatar Georges Racinet
Browse files

cext-revlog: fixed __delitem__ for uninitialized nodetree

This is a bug in a code path that's seldom used, because in practice
(at least in the whole test suite), calls to `del index[i:j]` currently
just don't happen before the nodetree has been initialized.
However, in our current work to replace the nodetree by a Rust implementation,
this is of course systematic.

In `index_slice_del()`, if the slice start is smaller than `self->length`,
the whole of `self->added` has to be cleared.

Before this change, the clearing was done only by the call to
`index_invalidate_added(self, 0)`, that happens only for initialized
nodetrees. Hence the removal was effective only from `start` to `self->length`.

The consequence is index corruption, with bogus results in subsequent calls,
and in particular errors such as `ValueError("parent out of range")`, due to
the fact that parents of entries in `self->added` are now just invalid.

This is detected by the rebase tests, under conditions that the nodetree
of revlog.c is never initialized. The provided specific test is more direct.

Differential Revision: https://phab.mercurial-scm.org/D7603
parent d5ce99a6
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment