From: Michael W. Hudson Date: Mon, 2 Aug 2004 13:24:54 +0000 (+0000) Subject: Any call to insort_{left,right} with a non-list leaked a reference to None X-Git-Tag: v2.4a2~65 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c9f510aed2e41666372579b578fb3c590e346386;p=thirdparty%2FPython%2Fcpython.git Any call to insort_{left,right} with a non-list leaked a reference to None (or to whatever the 'insert' method chose to return). --- diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c index d3361586488e..f4016fe9f68a 100644 --- a/Modules/_bisectmodule.c +++ b/Modules/_bisectmodule.c @@ -65,7 +65,7 @@ slice of a to be searched.\n"); static PyObject * insort_right(PyObject *self, PyObject *args) { - PyObject *list, *item; + PyObject *list, *item, *result; int lo = 0; int hi = -1; int index; @@ -80,9 +80,11 @@ insort_right(PyObject *self, PyObject *args) if (PyList_Insert(list, index, item) < 0) return NULL; } else { - if (PyObject_CallMethod(list, "insert", "iO", index, item) - == NULL) + result = PyObject_CallMethod(list, "insert", "iO", + index, item); + if (result == NULL) return NULL; + Py_DECREF(result); } Py_RETURN_NONE; @@ -158,7 +160,7 @@ slice of a to be searched.\n"); static PyObject * insort_left(PyObject *self, PyObject *args) { - PyObject *list, *item; + PyObject *list, *item, *result; int lo = 0; int hi = -1; int index; @@ -173,9 +175,11 @@ insort_left(PyObject *self, PyObject *args) if (PyList_Insert(list, index, item) < 0) return NULL; } else { - if (PyObject_CallMethod(list, "insert", "iO", index, item) - == NULL) + result = PyObject_CallMethod(list, "insert", "iO", + index, item); + if (result == NULL) return NULL; + Py_DECREF(result); } Py_RETURN_NONE;