From 74f906c4520fb91b0dc79f0b17aaef861d72da59 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 1 Oct 2026 23:38:33 +0200 Subject: [PATCH] gh-155742: Use PyMem_Malloc() in memoryview.hex() Replace PyBytesWriter with a simple PyMem_Malloc(), since no bytes object is needed. PyMem_Malloc() should be more efficient in this case. --- Objects/memoryobject.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index 5a8ae6ad149a75c..e6d49b6c29a3e95 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -2468,22 +2468,19 @@ memoryview_hex_impl(PyMemoryViewObject *self, PyObject *sep, return ret; } - PyBytesWriter *writer = PyBytesWriter_Create(src->len); - if (writer == NULL) { + char *buffer = PyMem_Malloc(src->len); + if (buffer == NULL) { + PyErr_NoMemory(); return NULL; } - if (PyBuffer_ToContiguous(PyBytesWriter_GetData(writer), - src, src->len, 'C') < 0) { - PyBytesWriter_Discard(writer); + if (PyBuffer_ToContiguous(buffer, src, src->len, 'C') < 0) { + PyMem_Free(buffer); return NULL; } - PyObject *ret = _Py_strhex_with_sep( - PyBytesWriter_GetData(writer), - PyBytesWriter_GetSize(writer), - sep, bytes_per_sep); - PyBytesWriter_Discard(writer); + PyObject *ret = _Py_strhex_with_sep(buffer, src->len, sep, bytes_per_sep); + PyMem_Free(buffer); return ret; }