Issue #24097: Fixed crash in object.__reduce__() if slot name is freed inside

__getattr__.  Original patch by Antoine Pitrou.
This commit is contained in:
Serhiy Storchaka 2015-11-25 18:35:15 +02:00
commit 6a50e79130
3 changed files with 23 additions and 0 deletions

View file

@ -3897,8 +3897,10 @@ _PyObject_GetState(PyObject *obj)
PyObject *name, *value;
name = PyList_GET_ITEM(slotnames, i);
Py_INCREF(name);
value = PyObject_GetAttr(obj, name);
if (value == NULL) {
Py_DECREF(name);
if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
goto error;
}
@ -3907,6 +3909,7 @@ _PyObject_GetState(PyObject *obj)
}
else {
int err = PyDict_SetItem(slots, name, value);
Py_DECREF(name);
Py_DECREF(value);
if (err) {
goto error;