cext: fix computephasesmapsets() not to return without setting an exception
Spotted by map() of Python 3.
--- a/mercurial/cext/revlog.c Sat Mar 03 06:44:47 2018 -0500
+++ b/mercurial/cext/revlog.c Sat Mar 03 06:57:02 2018 -0500
@@ -643,8 +643,10 @@
if (!PyArg_ParseTuple(args, "O", &roots))
goto done;
- if (roots == NULL || !PyList_Check(roots))
+ if (roots == NULL || !PyList_Check(roots)) {
+ PyErr_SetString(PyExc_TypeError, "roots must be a list");
goto done;
+ }
phases = calloc(len, 1); /* phase per rev: {0: public, 1: draft, 2: secret} */
if (phases == NULL) {
@@ -667,8 +669,11 @@
if (phaseset == NULL)
goto release;
PyList_SET_ITEM(phasessetlist, i+1, phaseset);
- if (!PyList_Check(phaseroots))
+ if (!PyList_Check(phaseroots)) {
+ PyErr_SetString(PyExc_TypeError,
+ "roots item must be a list");
goto release;
+ }
minrevphase = add_roots_get_min(self, phaseroots, i+1, phases);
if (minrevphase == -2) /* Error from add_roots_get_min */
goto release;