Mercurial > hg-stable
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; } /*