From 3beb26b461aa7bfc969e288fde4ca005b3911c6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= <10796600+picnixz@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:44:50 +0100 Subject: [PATCH 1/3] fix UBSan failures for `RandomObject` --- Modules/_randommodule.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index ad66df47349db0..88629a60d4ad07 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -117,6 +117,7 @@ typedef struct { uint32_t state[N]; } RandomObject; +#define _RandomObject_CAST(op) ((RandomObject *)(op)) #include "clinic/_randommodule.c.h" @@ -551,7 +552,7 @@ _random_Random_getrandbits_impl(RandomObject *self, int k) } static int -random_init(RandomObject *self, PyObject *args, PyObject *kwds) +random_init(PyObject *self, PyObject *args, PyObject *kwds) { PyObject *arg = NULL; _randomstate *state = _randomstate_type(Py_TYPE(self)); @@ -570,7 +571,7 @@ random_init(RandomObject *self, PyObject *args, PyObject *kwds) if (PyTuple_GET_SIZE(args) == 1) arg = PyTuple_GET_ITEM(args, 0); - return random_seed(self, arg); + return random_seed(_RandomObject_CAST(self), arg); } From 141c72af8ac706527ca7be9aab650fe0c0cd9423 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= <10796600+picnixz@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:44:59 +0100 Subject: [PATCH 2/3] suppress unused return values --- Modules/_randommodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 88629a60d4ad07..ff112939b93930 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -666,7 +666,7 @@ _random_clear(PyObject *module) static void _random_free(void *module) { - _random_clear((PyObject *)module); + (void)_random_clear((PyObject *)module); } static struct PyModuleDef _randommodule = { From 07f950e11495e8a7ceef19907615b8f5bb12d845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= <10796600+picnixz@users.noreply.github.com> Date: Sat, 8 Feb 2025 10:15:52 +0100 Subject: [PATCH 3/3] Do Do not use `_` + capital letter in new code as it is also UB. --- Modules/_randommodule.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index ff112939b93930..d5bac2f5b78120 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -117,7 +117,7 @@ typedef struct { uint32_t state[N]; } RandomObject; -#define _RandomObject_CAST(op) ((RandomObject *)(op)) +#define RandomObject_CAST(op) ((RandomObject *)(op)) #include "clinic/_randommodule.c.h" @@ -571,7 +571,7 @@ random_init(PyObject *self, PyObject *args, PyObject *kwds) if (PyTuple_GET_SIZE(args) == 1) arg = PyTuple_GET_ITEM(args, 0); - return random_seed(_RandomObject_CAST(self), arg); + return random_seed(RandomObject_CAST(self), arg); }