diff -r 0b57b77f9b3e -r a3d5da8b641e mercurial/parsers.c --- a/mercurial/parsers.c Sat Aug 01 05:43:39 2015 -0700 +++ b/mercurial/parsers.c Fri Aug 14 12:31:56 2015 +0900 @@ -1185,14 +1185,16 @@ /* Add the node to reachable if it is a root*/ revnum = tovisit[k++]; val = PyInt_FromLong(revnum); + if (val == NULL) + goto bail; if (PySet_Contains(roots, val) == 1) { PySet_Add(reachable, val); if (includepath == 0) { - Py_XDECREF(val); + Py_DECREF(val); continue; } } - Py_XDECREF(val); + Py_DECREF(val); /* Add its parents to the list of nodes to visit */ if (revnum != -1) { @@ -1223,9 +1225,15 @@ goto bail; for (k = 0; k < 2; k++) { PyObject *p = PyInt_FromLong(parents[k]); - if (PySet_Contains(reachable, p) == 1) - PySet_Add(reachable, PyInt_FromLong(i)); - Py_XDECREF(p); + if (p == NULL) + goto bail; + if (PySet_Contains(reachable, p) == 1) { + val = PyInt_FromLong(i); + if (val == NULL) + goto bail; + PySet_Add(reachable, val); + } + Py_DECREF(p); } } }