summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorBénédikt Tran <10796600+picnixz@users.noreply.github.com>2025-01-07 11:45:29 (GMT)
committerGitHub <noreply@github.com>2025-01-07 11:45:29 (GMT)
commitbcdf654c8a9d8a661e32e6a89f043197de19ad53 (patch)
treef7526308de3787ce42942b9c90b996a03bb85476 /Modules
parent61b9811ac6843e22b5896ef96030d421b79cd892 (diff)
downloadcpython-bcdf654c8a9d8a661e32e6a89f043197de19ad53.zip
cpython-bcdf654c8a9d8a661e32e6a89f043197de19ad53.tar.gz
cpython-bcdf654c8a9d8a661e32e6a89f043197de19ad53.tar.bz2
gh-111178: fix UBSan failures in `Modules/_abc.c` (GH-128253)
* fix UBSan failures in `_abc.c` * suppress unused return values
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_abc.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/Modules/_abc.c b/Modules/_abc.c
index 4f4b24b..d6a953b 100644
--- a/Modules/_abc.c
+++ b/Modules/_abc.c
@@ -67,6 +67,8 @@ typedef struct {
uint64_t _abc_negative_cache_version;
} _abc_data;
+#define _abc_data_CAST(op) ((_abc_data *)(op))
+
static inline uint64_t
get_cache_version(_abc_data *impl)
{
@@ -88,8 +90,9 @@ set_cache_version(_abc_data *impl, uint64_t version)
}
static int
-abc_data_traverse(_abc_data *self, visitproc visit, void *arg)
+abc_data_traverse(PyObject *op, visitproc visit, void *arg)
{
+ _abc_data *self = _abc_data_CAST(op);
Py_VISIT(Py_TYPE(self));
Py_VISIT(self->_abc_registry);
Py_VISIT(self->_abc_cache);
@@ -98,8 +101,9 @@ abc_data_traverse(_abc_data *self, visitproc visit, void *arg)
}
static int
-abc_data_clear(_abc_data *self)
+abc_data_clear(PyObject *op)
{
+ _abc_data *self = _abc_data_CAST(op);
Py_CLEAR(self->_abc_registry);
Py_CLEAR(self->_abc_cache);
Py_CLEAR(self->_abc_negative_cache);
@@ -107,7 +111,7 @@ abc_data_clear(_abc_data *self)
}
static void
-abc_data_dealloc(_abc_data *self)
+abc_data_dealloc(PyObject *self)
{
PyObject_GC_UnTrack(self);
PyTypeObject *tp = Py_TYPE(self);
@@ -212,7 +216,7 @@ _destroy(PyObject *setweakref, PyObject *objweakref)
}
static PyMethodDef _destroy_def = {
- "_destroy", (PyCFunction) _destroy, METH_O
+ "_destroy", _destroy, METH_O
};
static int
@@ -964,7 +968,7 @@ _abcmodule_clear(PyObject *module)
static void
_abcmodule_free(void *module)
{
- _abcmodule_clear((PyObject *)module);
+ (void)_abcmodule_clear((PyObject *)module);
}
static PyModuleDef_Slot _abcmodule_slots[] = {