Skip to content
Prev Previous commit
Next Next commit
fix UBSan failures for StructParamObject
  • Loading branch information
picnixz committed Jan 20, 2025
commit ec730bab0ee84415be8151c026a159c14aa71d3e
9 changes: 6 additions & 3 deletions Modules/_ctypes/_ctypes.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,24 +406,27 @@ typedef struct {
PyObject *keep; // If set, a reference to the original CDataObject.
} StructParamObject;

#define _StructParamObject_CAST(op) ((StructParamObject *)(op))

static int
StructParam_traverse(StructParamObject *self, visitproc visit, void *arg)
StructParam_traverse(PyObject *self, visitproc visit, void *arg)
{
Py_VISIT(Py_TYPE(self));
return 0;
}

static int
StructParam_clear(StructParamObject *self)
StructParam_clear(PyObject *op)
{
StructParamObject *self = _StructParamObject_CAST(op);
Py_CLEAR(self->keep);
return 0;
}

static void
StructParam_dealloc(PyObject *myself)
Comment thread
picnixz marked this conversation as resolved.
{
StructParamObject *self = (StructParamObject *)myself;
StructParamObject *self = _StructParamObject_CAST(myself);
PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(myself);
(void)StructParam_clear(self);
Expand Down