Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • mercurial-devel mercurial-devel
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Merge requests 30
    • Merge requests 30
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Jobs
  • Commits
Collapse sidebar

Due to a massive storm of spam, registration on this instance now requires explicit administrator approval. Sorry for the added friction, we're also looking into automatic filtering options.

  • mercurialmercurial
  • mercurial-develmercurial-devel
  • Merge requests
  • !12

cext-revlog: fixed __delitem__ for uninitialized nodetree

  • Review changes

  • Download
  • Patches
  • Plain diff
Closed Georges Racinet requested to merge topic/default/revlog-delitem-without-nt into branch/default Dec 11, 2019
  • Overview 0
  • Commits 0
  • Pipelines 0
  • Changes -

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.

Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: topic/default/revlog-delitem-without-nt