Avoid a potential double-free bug.
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index ac4859e..daaec02 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -3191,8 +3191,10 @@
Py_CLEAR(self->converters);
Py_CLEAR(self->paramflags);
- if (self->thunk)
+ if (self->thunk) {
FreeCallback(self->thunk);
+ PyMem_Free(self->thunk);
+ }
self->thunk = NULL;
return CData_clear((CDataObject *)self);
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 286faa3..4b1ca58 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -292,7 +292,6 @@
void FreeCallback(THUNK thunk)
{
FreeClosure(((ffi_info *)thunk)->pcl);
- PyMem_Free(thunk);
}
THUNK AllocFunctionCallback(PyObject *callable,