[PATCH] lazymanifest: check more return values in filtercopy

Augie Fackler raf at durin42.com
Tue Jan 5 09:57:59 CST 2016


# HG changeset patch
# User Augie Fackler <raf at durin42.com>
# Date 1451586702 18000
#      Thu Dec 31 13:31:42 2015 -0500
# Node ID 700ae5816d662e0e5dde55c68944329b6eb1b7c0
# Parent  0bc71f45d3623b231cc3975b48feccce79d1231e
lazymanifest: check more return values in filtercopy

Spotted by Bryan O'Sullivan (and vexingly not the static analyzer I've
been using.)

diff --git a/mercurial/manifest.c b/mercurial/manifest.c
--- a/mercurial/manifest.c
+++ b/mercurial/manifest.c
@@ -707,11 +707,20 @@ static lazymanifest *lazymanifest_filter
 	copy->pydata = self->pydata;
 	Py_INCREF(self->pydata);
 	for (i = 0; i < self->numlines; i++) {
-		PyObject *arg = PyString_FromString(self->lines[i].start);
-		PyObject *arglist = PyTuple_Pack(1, arg);
-		PyObject *result = PyObject_CallObject(matchfn, arglist);
+		PyObject *arg = NULL, *arglist = NULL, *result = NULL;
+		arg = PyString_FromString(self->lines[i].start);
+		if (!arg) {
+			PyErr_SetString(PyExc_TypeError,
+					"couldn't pack filename");
+			return NULL;
+		}
+		arglist = PyTuple_Pack(1, arg);
+		Py_DECREF(arg);
+		if (!arglist) {
+			return NULL;
+		}
+		result = PyObject_CallObject(matchfn, arglist);
 		Py_DECREF(arglist);
-		Py_DECREF(arg);
 		/* if the callback raised an exception, just let it
 		 * through and give up */
 		if (!result) {


More information about the Mercurial-devel mailing list