revlog: fix excessive decref on tuple creation failure in parse_index2()
authorYuya Nishihara <yuya@tcha.org>
Sun, 19 Jul 2020 17:24:16 +0900
changeset 45173 2bc5d1531235
parent 45172 04c428e93770
child 45174 f93a4e3d35ab
revlog: fix excessive decref on tuple creation failure in parse_index2() Since Py_BuildValue() steals the ownership of "N" arguments, these objects would already be freed if Py_BuildValue() returned NULL. https://github.com/python/cpython/blob/2.7/Python/modsupport.c#L292
mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c	Mon Jul 20 17:38:01 2020 +0200
+++ b/mercurial/cext/revlog.c	Sun Jul 19 17:24:16 2020 +0900
@@ -2885,7 +2885,7 @@
  */
 PyObject *parse_index2(PyObject *self, PyObject *args)
 {
-	PyObject *tuple = NULL, *cache = NULL;
+	PyObject *cache = NULL;
 	indexObject *idx;
 	int ret;
 
@@ -2906,15 +2906,11 @@
 		Py_INCREF(cache);
 	}
 
-	tuple = Py_BuildValue("NN", idx, cache);
-	if (!tuple)
-		goto bail;
-	return tuple;
+	return Py_BuildValue("NN", idx, cache);
 
 bail:
 	Py_XDECREF(idx);
 	Py_XDECREF(cache);
-	Py_XDECREF(tuple);
 	return NULL;
 }