]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-111178: fix UBSan failures in `Modules/_multiprocessing/semaphore.c` (#129084)
authorBénédikt Tran <10796600+picnixz@users.noreply.github.com>
Mon, 20 Jan 2025 20:43:55 +0000 (21:43 +0100)
committerGitHub <noreply@github.com>
Mon, 20 Jan 2025 20:43:55 +0000 (20:43 +0000)
fix UBSan failures for `SemLockObject`

Modules/_multiprocessing/semaphore.c

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