# HG changeset patch # User Martin von Zweigbergk # Date 2018-08-09 06:41:50 # Node ID 06ff7ea4f44019f51277ad82d9a8999c1f4eee48 # Parent 4dd92a15fcca1a02a75f55105e4da0dceedecf07 index: avoid duplicating capacity-growth expression We were duplicating the "*2" instead of reusing it. It's overflow-safe to reuse as long as the growth factor (i.e. currently 2) is not larger than sizeof(nodetreenode) (currently 64 or 128). Differential Revision: https://phab.mercurial-scm.org/D4165 diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c +++ b/mercurial/cext/revlog.c @@ -991,12 +991,11 @@ static int nt_new(nodetree *self) if (self->length == self->capacity) { unsigned newcapacity; nodetreenode *newnodes; - if (self->capacity >= INT_MAX / (sizeof(nodetreenode) * 2)) { - PyErr_SetString(PyExc_MemoryError, - "overflow in nt_new"); + newcapacity = self->capacity * 2; + if (newcapacity >= INT_MAX / sizeof(nodetreenode)) { + PyErr_SetString(PyExc_MemoryError, "overflow in nt_new"); return -1; } - newcapacity = self->capacity * 2; newnodes = realloc(self->nodes, newcapacity * sizeof(nodetreenode)); if (newnodes == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory");