https://github.com/python/cpython/commit/aa444bc4afadbd9eba2fec79eb685d4fc1ca3d99 commit: aa444bc4afadbd9eba2fec79eb685d4fc1ca3d99 branch: main author: Bénédikt Tran <10796600+picn...@users.noreply.github.com> committer: picnixz <10796600+picn...@users.noreply.github.com> date: 2025-03-24T10:52:52+01:00 summary:
gh-111178: fix UBSan failures for `PyBufferWrapper` (#131616) files: M Objects/typeobject.c diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 25153182f29487..fc4950ef30aec6 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -10372,9 +10372,12 @@ typedef struct _PyBufferWrapper { PyObject *obj; } PyBufferWrapper; +#define PyBufferWrapper_CAST(op) ((PyBufferWrapper *)(op)) + static int -bufferwrapper_traverse(PyBufferWrapper *self, visitproc visit, void *arg) +bufferwrapper_traverse(PyObject *op, visitproc visit, void *arg) { + PyBufferWrapper *self = PyBufferWrapper_CAST(op); Py_VISIT(self->mv); Py_VISIT(self->obj); return 0; @@ -10383,7 +10386,7 @@ bufferwrapper_traverse(PyBufferWrapper *self, visitproc visit, void *arg) static void bufferwrapper_dealloc(PyObject *self) { - PyBufferWrapper *bw = (PyBufferWrapper *)self; + PyBufferWrapper *bw = PyBufferWrapper_CAST(self); _PyObject_GC_UNTRACK(self); Py_XDECREF(bw->mv); @@ -10394,7 +10397,7 @@ bufferwrapper_dealloc(PyObject *self) static void bufferwrapper_releasebuf(PyObject *self, Py_buffer *view) { - PyBufferWrapper *bw = (PyBufferWrapper *)self; + PyBufferWrapper *bw = PyBufferWrapper_CAST(self); if (bw->mv == NULL || bw->obj == NULL) { // Already released @@ -10429,7 +10432,7 @@ PyTypeObject _PyBufferWrapper_Type = { .tp_basicsize = sizeof(PyBufferWrapper), .tp_alloc = PyType_GenericAlloc, .tp_free = PyObject_GC_Del, - .tp_traverse = (traverseproc)bufferwrapper_traverse, + .tp_traverse = bufferwrapper_traverse, .tp_dealloc = bufferwrapper_dealloc, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, .tp_as_buffer = &bufferwrapper_as_buffer, _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com