diff options
Diffstat (limited to 'Modules/_localemodule.c')
-rw-r--r-- | Modules/_localemodule.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index feb3802..f5c126a 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 |