Commit 2fb5a628 authored by Michael W. Hudson's avatar Michael W. Hudson

Repair refcounting on error return from type_set_bases.

Include a test case that failed for one of my efforts to repair this.
parent 3334d487
......@@ -3585,6 +3585,13 @@ def test_mutable_bases():
# actually, we'll have crashed by here...
raise TestFailed, "shouldn't be able to create inheritance cycles"
try:
D.__bases__ = (C, C)
except TypeError:
pass
else:
raise TestFailed, "didn't detect repeated base classes"
try:
D.__bases__ = (E,)
except TypeError:
......
......@@ -303,13 +303,16 @@ type_set_bases(PyTypeObject *type, PyObject *value, void *context)
return r;
bail:
Py_DECREF(type->tp_bases);
Py_DECREF(type->tp_base);
if (type->tp_mro != old_mro) {
Py_DECREF(type->tp_mro);
}
type->tp_bases = old_bases;
type->tp_base = old_base;
type->tp_mro = old_mro;
Py_DECREF(value);
Py_DECREF(new_base);
return -1;
}
......
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