From: Serhiy Storchaka Date: Mon, 6 Mar 2017 19:21:41 +0000 (+0200) Subject: bpo-15954: Check return code of wcsxfrm(). (#508) X-Git-Tag: v3.7.0a1~1189 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=be487a65f18e1be5fde03e2977fff4be53cc2fbf;p=python bpo-15954: Check return code of wcsxfrm(). (#508) --- diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index feb3802900..f5c126a7a1 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