Commit 19a02ba6 authored by Guido van Rossum's avatar Guido van Rossum

Fix three (!) object leaks in the code for assignment to __bases__.

parent 4323090d
...@@ -164,10 +164,12 @@ mro_subclasses(PyTypeObject *type, PyObject* temp) ...@@ -164,10 +164,12 @@ mro_subclasses(PyTypeObject *type, PyObject* temp)
else { else {
PyObject* tuple; PyObject* tuple;
tuple = Py_BuildValue("OO", subclass, old_mro); tuple = Py_BuildValue("OO", subclass, old_mro);
Py_DECREF(old_mro);
if (!tuple) if (!tuple)
return -1; return -1;
if (PyList_Append(temp, tuple) < 0) if (PyList_Append(temp, tuple) < 0)
return -1; return -1;
Py_DECREF(tuple);
} }
if (mro_subclasses(subclass, temp) < 0) if (mro_subclasses(subclass, temp) < 0)
return -1; return -1;
...@@ -256,7 +258,7 @@ type_set_bases(PyTypeObject *type, PyObject *value, void *context) ...@@ -256,7 +258,7 @@ type_set_bases(PyTypeObject *type, PyObject *value, void *context)
for (i = 0; i < PyList_Size(temp); i++) { for (i = 0; i < PyList_Size(temp); i++) {
PyTypeObject* cls; PyTypeObject* cls;
PyObject* mro; PyObject* mro;
PyArg_ParseTuple(PyList_GetItem(temp, i), PyArg_ParseTuple(PyList_GET_ITEM(temp, i),
"OO", &cls, &mro); "OO", &cls, &mro);
Py_DECREF(cls->tp_mro); Py_DECREF(cls->tp_mro);
cls->tp_mro = mro; cls->tp_mro = mro;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment