From be487a65f18e1be5fde03e2977fff4be53cc2fbf Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 6 Mar 2017 21:21:41 +0200 Subject: [PATCH] bpo-15954: Check return code of wcsxfrm(). (#508) --- Modules/_localemodule.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index feb38029008..f5c126a7a14 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -260,7 +260,12 @@ PyLocale_strxfrm(PyObject* self, PyObject* args) PyErr_NoMemory(); goto exit; } + errno = 0; n2 = wcsxfrm(buf, s, n1); + if (errno) { + PyErr_SetFromErrno(PyExc_OSError); + goto exit; + } if (n2 >= (size_t)n1) { /* more space needed */ wchar_t * new_buf = PyMem_Realloc(buf, (n2+1)*sizeof(wchar_t)); @@ -269,14 +274,17 @@ PyLocale_strxfrm(PyObject* self, PyObject* args) goto exit; } buf = new_buf; + errno = 0; n2 = wcsxfrm(buf, s, n2+1); + if (errno) { + PyErr_SetFromErrno(PyExc_OSError); + goto exit; + } } result = PyUnicode_FromWideChar(buf, n2); exit: - if (buf) - PyMem_Free(buf); - if (s) - PyMem_Free(s); + PyMem_Free(buf); + PyMem_Free(s); return result; } #endif