parsers: check results of PyInt_FromLong (issue4771)
authorBryan O'Sullivan <bos@serpentine.com>
Mon, 14 Dec 2015 10:47:26 -0800
changeset 27365 ec04370bdfaf
parent 27364 ad1cc1435b13
child 27366 7e8a883da171
parsers: check results of PyInt_FromLong (issue4771)
mercurial/parsers.c
--- a/mercurial/parsers.c	Mon Dec 14 10:47:24 2015 -0800
+++ b/mercurial/parsers.c	Mon Dec 14 10:47:26 2015 -0800
@@ -1333,16 +1333,23 @@
 	if (phaseslist == NULL)
 		goto release;
 	for (i = 0; i < len; i++) {
+		PyObject *phaseval;
+
 		phase = phases[i];
 		/* We only store the sets of phase for non public phase, the public phase
 		 * is computed as a difference */
 		if (phase != 0) {
 			phaseset = PyList_GET_ITEM(phasessetlist, phase);
 			rev = PyInt_FromLong(i);
+			if (rev == NULL)
+				goto release;
 			PySet_Add(phaseset, rev);
 			Py_XDECREF(rev);
 		}
-		PyList_SET_ITEM(phaseslist, i, PyInt_FromLong(phase));
+		phaseval = PyInt_FromLong(phase);
+		if (phaseval == NULL)
+			goto release;
+		PyList_SET_ITEM(phaseslist, i, phaseval);
 	}
 	ret = PyList_New(2);
 	if (ret == NULL)