event: Fix memory leak in debug check of task.set_owner(...)

Fixes #1328
This commit is contained in:
rdb 2022-06-29 15:13:57 +02:00
parent c24a15ed40
commit 9ab460c900

View File

@ -209,10 +209,22 @@ set_owner(PyObject *owner) {
#ifndef NDEBUG #ifndef NDEBUG
if (owner != Py_None) { if (owner != Py_None) {
PyObject *add = PyObject_GetAttrString(owner, "_addTask"); PyObject *add = PyObject_GetAttrString(owner, "_addTask");
PyErr_Clear();
PyObject *clear = PyObject_GetAttrString(owner, "_clearTask"); PyObject *clear = PyObject_GetAttrString(owner, "_clearTask");
PyErr_Clear();
if (add == nullptr || !PyCallable_Check(add) || bool valid_add = false;
clear == nullptr || !PyCallable_Check(clear)) { if (add != nullptr) {
valid_add = PyCallable_Check(add);
Py_DECREF(add);
}
bool valid_clear = false;
if (clear != nullptr) {
valid_clear = PyCallable_Check(clear);
Py_DECREF(clear);
}
if (!valid_add || !valid_clear) {
Dtool_Raise_TypeError("owner object should have _addTask and _clearTask methods"); Dtool_Raise_TypeError("owner object should have _addTask and _clearTask methods");
return; return;
} }