# HG changeset patch # User Martin von Zweigbergk # Date 2018-08-07 05:34:37 # Node ID f7d8fb2ed8a82dfd8afcf9505ca24748f5cb0e51 # Parent 05c1f5f49ebbd53b6a520991c86e6311617d8d6e 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 diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c +++ b/mercurial/cext/revlog.c @@ -1092,15 +1092,15 @@ static int nt_delete_node(indexObject *s 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;