Commit 3752bc96 authored by Miss Islington (bot)'s avatar Miss Islington (bot) Committed by GitHub

bpo-35529: Fix a reference counting bug in PyCFuncPtr_FromDll(). (GH-11229)


"dll" would leak if an error occurred in _validate_paramflags() or
GenericPyCData_new().
(cherry picked from commit d77d97c9)
Co-authored-by: default avatarZackery Spytz <zspytz@gmail.com>
parent 89b5ea29
......@@ -3526,20 +3526,23 @@ PyCFuncPtr_FromDll(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
}
#endif
Py_INCREF(dll); /* for KeepRef */
Py_DECREF(ftuple);
if (!_validate_paramflags(type, paramflags))
if (!_validate_paramflags(type, paramflags)) {
Py_DECREF(ftuple);
return NULL;
}
self = (PyCFuncPtrObject *)GenericPyCData_new(type, args, kwds);
if (!self)
if (!self) {
Py_DECREF(ftuple);
return NULL;
}
Py_XINCREF(paramflags);
self->paramflags = paramflags;
*(void **)self->b_ptr = address;
Py_INCREF(dll);
Py_DECREF(ftuple);
if (-1 == KeepRef((CDataObject *)self, 0, dll)) {
Py_DECREF((PyObject *)self);
return NULL;
......
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