diff --git a/Include/pybuffer.h b/Include/pybuffer.h index 6371b9b483777b..5d5f537f7658db 100644 --- a/Include/pybuffer.h +++ b/Include/pybuffer.h @@ -25,7 +25,7 @@ typedef struct { pointed to by strides in simple case.*/ int readonly; int ndim; - char *format; + const char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; diff --git a/Misc/NEWS.d/next/C_API/2026-08-14-20-39-52.gh-issue-155819.rnxJf1.rst b/Misc/NEWS.d/next/C_API/2026-08-14-20-39-52.gh-issue-155819.rnxJf1.rst new file mode 100644 index 00000000000000..b43de120188b75 --- /dev/null +++ b/Misc/NEWS.d/next/C_API/2026-08-14-20-39-52.gh-issue-155819.rnxJf1.rst @@ -0,0 +1,3 @@ +The member ``format`` of ``Py_buffer`` is now of type ``const char *`` +rather than of type ``char *``. Contributed by High Performance Kernels +LLC. diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c index 8b6b617aafa427..5c39cd7d2fca2f 100644 --- a/Modules/_testbuffer.c +++ b/Modules/_testbuffer.c @@ -165,7 +165,7 @@ ndbuf_free(ndbuf_t *ndbuf) Py_buffer *base = &ndbuf->base; PyMem_XFree(ndbuf->data); - PyMem_XFree(base->format); + PyMem_XFree((void*)base->format); PyMem_XFree(base->shape); PyMem_XFree(base->strides); PyMem_XFree(base->suboffsets); @@ -666,7 +666,7 @@ ndarray_as_list(NDArrayObject *nd) Py_ssize_t simple_strides[1]; char *item = NULL; PyObject *format; - char *fmt = base->format; + const char *fmt = base->format; base = &nd->head->base; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index a0181c083a6036..5832ef0de9797e 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2907,7 +2907,7 @@ array_buffer_getbuf(PyObject *op, Py_buffer *view, int flags) view->format = NULL; view->internal = NULL; if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) { - view->format = (char *)self->ob_descr->typecode; + view->format = self->ob_descr->typecode; } self->ob_exports++; diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index 0bcd0b6596be77..3deff72b93f1c5 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -123,7 +123,7 @@ mbuf_dealloc(PyObject *_self) assert(self->exports == 0); mbuf_release(self); if (self->flags&_Py_MANAGED_BUFFER_FREE_FORMAT) - PyMem_Free(self->master.format); + PyMem_Free((void*)self->master.format); PyObject_GC_Del(self); } @@ -1340,7 +1340,7 @@ cast_to_1D(PyMemoryViewObject *mv, PyObject *format) goto out; } - view->format = (char *)get_native_fmtstr(PyBytes_AS_STRING(asciifmt)); + view->format = get_native_fmtstr(PyBytes_AS_STRING(asciifmt)); if (view->format == NULL) { /* NOT_REACHED: get_native_fmtchar() already validates the format. */ PyErr_SetString(PyExc_RuntimeError,