#18113: avoid segfault if Py_XDECREF triggers code that calls set_panel_userptr again

Problem noted & original patch by Serhiy Storchaka; I tweaked the patch a bit.
This commit is contained in:
Andrew Kuchling 2013-06-22 14:50:56 -04:00
parent 45d9493ee9
commit 9290dd14b0
2 changed files with 18 additions and 4 deletions

View file

@ -323,12 +323,17 @@ static PyObject *
PyCursesPanel_set_panel_userptr(PyCursesPanelObject *self, PyObject *obj)
{
PyObject *oldobj;
int rc;
PyCursesInitialised;
oldobj = (PyObject *) panel_userptr(self->pan);
Py_XDECREF(oldobj);
Py_INCREF(obj);
return PyCursesCheckERR(set_panel_userptr(self->pan, (void*)obj),
"set_panel_userptr");
oldobj = (PyObject *) panel_userptr(self->pan);
rc = set_panel_userptr(self->pan, (void*)obj);
if (rc == ERR) {
/* In case of an ncurses error, decref the new object again */
Py_DECREF(obj);
}
Py_XDECREF(oldobj);
return PyCursesCheckERR(rc, "set_panel_userptr");
}
static PyObject *