gh-111178: fix UBSan failures in Modules/_multiprocessing/semaphore.c (#129084)

fix UBSan failures for `SemLockObject`
This commit is contained in:
Bénédikt Tran 2025-01-20 21:43:55 +01:00 committed by GitHub
parent 382340d559
commit 5ed5572cac
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -28,6 +28,8 @@ typedef struct {
char *name; char *name;
} SemLockObject; } SemLockObject;
#define _SemLockObject_CAST(op) ((SemLockObject *)(op))
/*[python input] /*[python input]
class SEM_HANDLE_converter(CConverter): class SEM_HANDLE_converter(CConverter):
type = "SEM_HANDLE" type = "SEM_HANDLE"
@ -576,8 +578,9 @@ _multiprocessing_SemLock__rebuild_impl(PyTypeObject *type, SEM_HANDLE handle,
} }
static void static void
semlock_dealloc(SemLockObject* self) semlock_dealloc(PyObject *op)
{ {
SemLockObject *self = _SemLockObject_CAST(op);
PyTypeObject *tp = Py_TYPE(self); PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(self); PyObject_GC_UnTrack(self);
if (self->handle != SEM_FAILED) if (self->handle != SEM_FAILED)
@ -718,7 +721,7 @@ _multiprocessing_SemLock___exit___impl(SemLockObject *self,
} }
static int static int
semlock_traverse(SemLockObject *s, visitproc visit, void *arg) semlock_traverse(PyObject *s, visitproc visit, void *arg)
{ {
Py_VISIT(Py_TYPE(s)); Py_VISIT(Py_TYPE(s));
return 0; return 0;