Skip to content

Commit be487a6

Browse files
bpo-15954: Check return code of wcsxfrm(). (#508)
1 parent d908fd9 commit be487a6

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

Modules/_localemodule.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,12 @@ PyLocale_strxfrm(PyObject* self, PyObject* args)
260260
PyErr_NoMemory();
261261
goto exit;
262262
}
263+
errno = 0;
263264
n2 = wcsxfrm(buf, s, n1);
265+
if (errno) {
266+
PyErr_SetFromErrno(PyExc_OSError);
267+
goto exit;
268+
}
264269
if (n2 >= (size_t)n1) {
265270
/* more space needed */
266271
wchar_t * new_buf = PyMem_Realloc(buf, (n2+1)*sizeof(wchar_t));
@@ -269,14 +274,17 @@ PyLocale_strxfrm(PyObject* self, PyObject* args)
269274
goto exit;
270275
}
271276
buf = new_buf;
277+
errno = 0;
272278
n2 = wcsxfrm(buf, s, n2+1);
279+
if (errno) {
280+
PyErr_SetFromErrno(PyExc_OSError);
281+
goto exit;
282+
}
273283
}
274284
result = PyUnicode_FromWideChar(buf, n2);
275285
exit:
276-
if (buf)
277-
PyMem_Free(buf);
278-
if (s)
279-
PyMem_Free(s);
286+
PyMem_Free(buf);
287+
PyMem_Free(s);
280288
return result;
281289
}
282290
#endif

0 commit comments

Comments
 (0)