From cb56a8f8281ee7a160a7bdfb43b5d8e0ee2f6784 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 22 Jun 2024 08:58:22 +0200 Subject: [PATCH] gh-119182: Use PyUnicodeWriter_WriteWideChar() (#120851) Use PyUnicodeWriter_WriteWideChar() in PyUnicode_FromFormat() --- Objects/unicodeobject.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 74a743812c9c78d..4c174cbc7510914 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -2612,11 +2612,7 @@ static int unicode_fromformat_write_wcstr(_PyUnicodeWriter *writer, const wchar_t *str, Py_ssize_t width, Py_ssize_t precision, int flags) { - /* UTF-8 */ Py_ssize_t length; - PyObject *unicode; - int res; - if (precision == -1) { length = wcslen(str); } @@ -2626,11 +2622,17 @@ unicode_fromformat_write_wcstr(_PyUnicodeWriter *writer, const wchar_t *str, length++; } } - unicode = PyUnicode_FromWideChar(str, length); + + if (width < 0) { + return PyUnicodeWriter_WriteWideChar((PyUnicodeWriter*)writer, + str, length); + } + + PyObject *unicode = PyUnicode_FromWideChar(str, length); if (unicode == NULL) return -1; - res = unicode_fromformat_write_str(writer, unicode, width, -1, flags); + int res = unicode_fromformat_write_str(writer, unicode, width, -1, flags); Py_DECREF(unicode); return res; }