# HG changeset patch # User Mike Edgar # Date 1417712522 18000 # Node ID ee311681e5918386743f27d7f6d9e7b85e26e393 # Parent c237499a7fba65c88a2da721a22b66df4f39cf4e parsers: ensure revlog index node tree is initialized before insertion Currently, the revlog index C implementation assumes its node tree will be initialized before a new element is inserted by revnum. For example, revlog.py executes 'self.index.insert(-1, e)' in _addrevision(). This is only safe because the node tree has been initialized by a "node in self.nodemap" check made in addrevision(). (For context, this was discovered while developing an experimental revlog mixin which stores "elided nodes" via a separate code path from _addrevision(); that new code path segfaults without this patch.) diff -r c237499a7fba -r ee311681e591 mercurial/parsers.c --- a/mercurial/parsers.c Wed Dec 03 22:56:42 2014 +0900 +++ b/mercurial/parsers.c Thu Dec 04 12:02:02 2014 -0500 @@ -1978,6 +1978,9 @@ PyErr_SetString(PyExc_ValueError, "rev out of range"); return -1; } + + if (nt_init(self) == -1) + return -1; return nt_insert(self, node, (int)rev); }