From d918d4ad2f22f9ecc2717588f07c858960f91afc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 13 Aug 2026 19:41:50 +0200 Subject: [PATCH] gh-155742: Use PyBytesWriter in _io _textiowrapper_writeflush() Replace soft deprecated PyBytes_FromStringAndSize() with PyBytesWriter. Replace PyBytes_AsStringAndSize() with PyBytes_AS_STRING() and PyBytes_GET_SIZE(). --- Modules/_io/textio.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index ea8ed2713d8a14..2f63543f720d7a 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1671,17 +1671,17 @@ _textiowrapper_writeflush(textio *self) } else { assert(PyList_Check(pending)); - b = PyBytes_FromStringAndSize(NULL, self->pending_bytes_count); - if (b == NULL) { + PyBytesWriter *writer = PyBytesWriter_Create(self->pending_bytes_count); + if (writer == NULL) { return -1; } - char *buf = PyBytes_AsString(b); + char *buf = PyBytesWriter_GetData(writer); Py_ssize_t pos = 0; for (Py_ssize_t i = 0; i < PyList_GET_SIZE(pending); i++) { PyObject *obj = PyList_GET_ITEM(pending, i); - char *src; + const char *src; Py_ssize_t len; if (PyUnicode_Check(obj)) { assert(PyUnicode_IS_ASCII(obj)); @@ -1690,15 +1690,18 @@ _textiowrapper_writeflush(textio *self) } else { assert(PyBytes_Check(obj)); - if (PyBytes_AsStringAndSize(obj, &src, &len) < 0) { - Py_DECREF(b); - return -1; - } + src = PyBytes_AS_STRING(obj); + len = PyBytes_GET_SIZE(obj); } memcpy(buf + pos, src, len); pos += len; } assert(pos == self->pending_bytes_count); + + b = PyBytesWriter_Finish(writer); + if (b == NULL) { + return -1; + } } self->pending_bytes_count = 0;