index: remove side-effect from failed nt_init()
As pointed out by Yuya in the review of D4108, if we run into the
"overflow in nt_init" case (which I think normally happens only in
repos with at least 2^26=64Mi revisions), we would leave the node tree
half-initialized.
Differential Revision: https://phab.mercurial-scm.org/D4153
--- a/mercurial/cext/revlog.c Mon Aug 06 22:24:34 2018 -0700
+++ b/mercurial/cext/revlog.c Mon Aug 06 22:34:37 2018 -0700
@@ -1092,15 +1092,15 @@
static int nt_init(indexObject *self)
{
if (self->nt == NULL) {
+ if ((size_t)self->raw_length > INT_MAX / sizeof(nodetreenode)) {
+ PyErr_SetString(PyExc_ValueError, "overflow in nt_init");
+ return -1;
+ }
self->nt = PyMem_Malloc(sizeof(nodetree));
if (self->nt == NULL) {
PyErr_NoMemory();
return -1;
}
- if ((size_t)self->raw_length > INT_MAX / sizeof(nodetreenode)) {
- PyErr_SetString(PyExc_ValueError, "overflow in nt_init");
- return -1;
- }
self->nt->capacity = self->raw_length < 4
? 4 : (int)self->raw_length / 2;