Vladimir Marangozov:
Avoid calling the dealloc function, previously triggered with
DECREF(inst). This caused a segfault in PyDict_GetItem, called with a
NULL dict, whenever inst->in_dict fails under low-memory conditions.
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 9e1d1b2..cd0bb1d 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -489,13 +489,13 @@
inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
if (inst == NULL)
return NULL;
- Py_INCREF(class);
- inst->in_class = (PyClassObject *)class;
inst->in_dict = PyDict_New();
if (inst->in_dict == NULL) {
- Py_DECREF(inst);
+ PyObject_DEL(inst);
return NULL;
}
+ Py_INCREF(class);
+ inst->in_class = (PyClassObject *)class;
if (initstr == NULL)
initstr = PyString_InternFromString("__init__");
init = instance_getattr2(inst, initstr);