gh-111178: fix UBSan failures for Modules/_testbuffer.c (#131612)

This commit is contained in:
Bénédikt Tran 2025-03-24 10:46:25 +01:00 committed by GitHub
parent ef06508f8e
commit 82e541bf91
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1586,8 +1586,9 @@ ptr_from_index(Py_buffer *base, Py_ssize_t index)
} }
static PyObject * static PyObject *
ndarray_item(NDArrayObject *self, Py_ssize_t index) ndarray_item(PyObject *op, Py_ssize_t index)
{ {
NDArrayObject *self = (NDArrayObject *)op;
ndbuf_t *ndbuf = self->head; ndbuf_t *ndbuf = self->head;
Py_buffer *base = &ndbuf->base; Py_buffer *base = &ndbuf->base;
char *ptr; char *ptr;
@ -1801,7 +1802,7 @@ ndarray_subscript(PyObject *op, PyObject *key)
Py_ssize_t index = PyLong_AsSsize_t(key); Py_ssize_t index = PyLong_AsSsize_t(key);
if (index == -1 && PyErr_Occurred()) if (index == -1 && PyErr_Occurred())
return NULL; return NULL;
return ndarray_item(self, index); return ndarray_item(op, index);
} }
nd = (NDArrayObject *)ndarray_new(&NDArray_Type, NULL, NULL); nd = (NDArrayObject *)ndarray_new(&NDArray_Type, NULL, NULL);
@ -1966,10 +1967,10 @@ static PyMappingMethods ndarray_as_mapping = {
}; };
static PySequenceMethods ndarray_as_sequence = { static PySequenceMethods ndarray_as_sequence = {
0, /* sq_length */ 0, /* sq_length */
0, /* sq_concat */ 0, /* sq_concat */
0, /* sq_repeat */ 0, /* sq_repeat */
(ssizeargfunc)ndarray_item, /* sq_item */ ndarray_item, /* sq_item */
}; };
@ -2742,7 +2743,7 @@ staticarray_init(PyObject *self, PyObject *args, PyObject *kwds)
} }
static void static void
staticarray_dealloc(StaticArrayObject *self) staticarray_dealloc(PyObject *self)
{ {
PyObject_Free(self); PyObject_Free(self);
} }
@ -2750,8 +2751,9 @@ staticarray_dealloc(StaticArrayObject *self)
/* Return a buffer for a PyBUF_FULL_RO request. Flags are not checked, /* Return a buffer for a PyBUF_FULL_RO request. Flags are not checked,
which makes this object a non-compliant exporter! */ which makes this object a non-compliant exporter! */
static int static int
staticarray_getbuf(StaticArrayObject *self, Py_buffer *view, int flags) staticarray_getbuf(PyObject *op, Py_buffer *view, int flags)
{ {
StaticArrayObject *self = (StaticArrayObject *)op;
*view = static_buffer; *view = static_buffer;
if (self->legacy_mode) { if (self->legacy_mode) {
@ -2765,7 +2767,7 @@ staticarray_getbuf(StaticArrayObject *self, Py_buffer *view, int flags)
} }
static PyBufferProcs staticarray_as_buffer = { static PyBufferProcs staticarray_as_buffer = {
(getbufferproc)staticarray_getbuf, /* bf_getbuffer */ staticarray_getbuf, /* bf_getbuffer */
NULL, /* bf_releasebuffer */ NULL, /* bf_releasebuffer */
}; };
@ -2774,7 +2776,7 @@ static PyTypeObject StaticArray_Type = {
"staticarray", /* Name of this type */ "staticarray", /* Name of this type */
sizeof(StaticArrayObject), /* Basic object size */ sizeof(StaticArrayObject), /* Basic object size */
0, /* Item size for varobject */ 0, /* Item size for varobject */
(destructor)staticarray_dealloc, /* tp_dealloc */ staticarray_dealloc, /* tp_dealloc */
0, /* tp_vectorcall_offset */ 0, /* tp_vectorcall_offset */
0, /* tp_getattr */ 0, /* tp_getattr */
0, /* tp_setattr */ 0, /* tp_setattr */