Skip to content

Commit 2cd1c87

Browse files
authored
gh-104456: Fix ref leak in _ctypes.COMError (#104457)
1 parent fb8739f commit 2cd1c87

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

Modules/_ctypes/_ctypes.c

+9-1
Original file line numberDiff line numberDiff line change
@@ -5476,18 +5476,25 @@ comerror_init(PyObject *self, PyObject *args, PyObject *kwds)
54765476
return 0;
54775477
}
54785478

5479+
static int
5480+
comerror_clear(PyObject *self)
5481+
{
5482+
return ((PyTypeObject *)PyExc_BaseException)->tp_clear(self);
5483+
}
5484+
54795485
static int
54805486
comerror_traverse(PyObject *self, visitproc visit, void *arg)
54815487
{
54825488
Py_VISIT(Py_TYPE(self));
5483-
return 0;
5489+
return ((PyTypeObject *)PyExc_BaseException)->tp_traverse(self, visit, arg);
54845490
}
54855491

54865492
static void
54875493
comerror_dealloc(PyObject *self)
54885494
{
54895495
PyTypeObject *tp = Py_TYPE(self);
54905496
PyObject_GC_UnTrack(self);
5497+
(void)comerror_clear(self);
54915498
tp->tp_free(self);
54925499
Py_DECREF(tp);
54935500
}
@@ -5497,6 +5504,7 @@ static PyType_Slot comerror_slots[] = {
54975504
{Py_tp_init, comerror_init},
54985505
{Py_tp_traverse, comerror_traverse},
54995506
{Py_tp_dealloc, comerror_dealloc},
5507+
{Py_tp_clear, comerror_clear},
55005508
{0, NULL},
55015509
};
55025510

0 commit comments

Comments
 (0)