changeset 26048:0be2f81aadc3

parsers: fix two leaks in index_ancestors Both happy paths through this function leaked the returned list: 1) If the list was of size 0 or 1, it was retained an extra time and then returned. 2) If the list was passed to find_deepest, it was never released before exiting this function. Both paths spotted by cpychecker.
author Augie Fackler <augie@google.com>
date Tue, 18 Aug 2015 17:15:04 -0400
parents d9d3d49c4cf7
children b1634b7804c7
files mercurial/parsers.c
diffstat 1 files changed, 4 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/parsers.c	Tue Aug 18 18:38:56 2015 -0500
+++ b/mercurial/parsers.c	Tue Aug 18 17:15:04 2015 -0400
@@ -2158,16 +2158,18 @@
  */
 static PyObject *index_ancestors(indexObject *self, PyObject *args)
 {
+	PyObject *ret;
 	PyObject *gca = index_commonancestorsheads(self, args);
 	if (gca == NULL)
 		return NULL;
 
 	if (PyList_GET_SIZE(gca) <= 1) {
-		Py_INCREF(gca);
 		return gca;
 	}
 
-	return find_deepest(self, gca);
+	ret = find_deepest(self, gca);
+	Py_DECREF(gca);
+	return ret;
 }
 
 /*