Patchwork [07,of,11] cext: fix computephasesmapsets() not to return without setting an exception

login
register
mail settings
Submitter Yuya Nishihara
Date March 3, 2018, 1:27 p.m.
Message ID <0ceb34d59bec1e851246.1520083660@mimosa>
Download mbox | patch
Permalink /patch/28773/
State Accepted
Headers show

Comments

Yuya Nishihara - March 3, 2018, 1:27 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1520078222 18000
#      Sat Mar 03 06:57:02 2018 -0500
# Node ID 0ceb34d59bec1e8512461f2479c7fe5024a85422
# Parent  87b0df6c39fff3ac758a52a9b0b95bca1f61187c
cext: fix computephasesmapsets() not to return without setting an exception

Spotted by map() of Python 3.

Patch

diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -643,8 +643,10 @@  static PyObject *compute_phases_map_sets
 
 	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 @@  static PyObject *compute_phases_map_sets
 		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;