Skip to content

Commit aa444bc

Browse files
authored
gh-111178: fix UBSan failures for PyBufferWrapper (#131616)
1 parent 82e541b commit aa444bc

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

Objects/typeobject.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10372,9 +10372,12 @@ typedef struct _PyBufferWrapper {
1037210372
PyObject *obj;
1037310373
} PyBufferWrapper;
1037410374

10375+
#define PyBufferWrapper_CAST(op) ((PyBufferWrapper *)(op))
10376+
1037510377
static int
10376-
bufferwrapper_traverse(PyBufferWrapper *self, visitproc visit, void *arg)
10378+
bufferwrapper_traverse(PyObject *op, visitproc visit, void *arg)
1037710379
{
10380+
PyBufferWrapper *self = PyBufferWrapper_CAST(op);
1037810381
Py_VISIT(self->mv);
1037910382
Py_VISIT(self->obj);
1038010383
return 0;
@@ -10383,7 +10386,7 @@ bufferwrapper_traverse(PyBufferWrapper *self, visitproc visit, void *arg)
1038310386
static void
1038410387
bufferwrapper_dealloc(PyObject *self)
1038510388
{
10386-
PyBufferWrapper *bw = (PyBufferWrapper *)self;
10389+
PyBufferWrapper *bw = PyBufferWrapper_CAST(self);
1038710390

1038810391
_PyObject_GC_UNTRACK(self);
1038910392
Py_XDECREF(bw->mv);
@@ -10394,7 +10397,7 @@ bufferwrapper_dealloc(PyObject *self)
1039410397
static void
1039510398
bufferwrapper_releasebuf(PyObject *self, Py_buffer *view)
1039610399
{
10397-
PyBufferWrapper *bw = (PyBufferWrapper *)self;
10400+
PyBufferWrapper *bw = PyBufferWrapper_CAST(self);
1039810401

1039910402
if (bw->mv == NULL || bw->obj == NULL) {
1040010403
// Already released
@@ -10429,7 +10432,7 @@ PyTypeObject _PyBufferWrapper_Type = {
1042910432
.tp_basicsize = sizeof(PyBufferWrapper),
1043010433
.tp_alloc = PyType_GenericAlloc,
1043110434
.tp_free = PyObject_GC_Del,
10432-
.tp_traverse = (traverseproc)bufferwrapper_traverse,
10435+
.tp_traverse = bufferwrapper_traverse,
1043310436
.tp_dealloc = bufferwrapper_dealloc,
1043410437
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
1043510438
.tp_as_buffer = &bufferwrapper_as_buffer,

0 commit comments

Comments
 (0)