Skip to content

Commit

Permalink
bpo-42658: Allow _winapi.LCMapStringEx to handle embedded nulls (GH-9…
Browse files Browse the repository at this point in the history
  • Loading branch information
zooba authored Jun 10, 2022
1 parent aee7d3d commit 98558a8
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions Modules/_winapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1535,13 +1535,19 @@ _winapi_LCMapStringEx_impl(PyObject *module, PyObject *locale, DWORD flags,
if (!locale_) {
return NULL;
}
wchar_t *src_ = PyUnicode_AsWideCharString(src, NULL);
Py_ssize_t srcLenAsSsize;
int srcLen;
wchar_t *src_ = PyUnicode_AsWideCharString(src, &srcLenAsSsize);
if (!src_) {
PyMem_Free(locale_);
return NULL;
}
srcLen = (int)srcLenAsSsize;
if (srcLen != srcLenAsSsize) {
srcLen = -1;
}

int dest_size = LCMapStringEx(locale_, flags, src_, -1, NULL, 0,
int dest_size = LCMapStringEx(locale_, flags, src_, srcLen, NULL, 0,
NULL, NULL, 0);
if (dest_size == 0) {
PyMem_Free(locale_);
Expand All @@ -1556,7 +1562,7 @@ _winapi_LCMapStringEx_impl(PyObject *module, PyObject *locale, DWORD flags,
return PyErr_NoMemory();
}

int nmapped = LCMapStringEx(locale_, flags, src_, -1, dest, dest_size,
int nmapped = LCMapStringEx(locale_, flags, src_, srcLen, dest, dest_size,
NULL, NULL, 0);
if (nmapped == 0) {
DWORD error = GetLastError();
Expand All @@ -1566,7 +1572,7 @@ _winapi_LCMapStringEx_impl(PyObject *module, PyObject *locale, DWORD flags,
return PyErr_SetFromWindowsErr(error);
}

PyObject *ret = PyUnicode_FromWideChar(dest, dest_size - 1);
PyObject *ret = PyUnicode_FromWideChar(dest, dest_size);
PyMem_Free(locale_);
PyMem_Free(src_);
PyMem_DEL(dest);
Expand Down

0 comments on commit 98558a8

Please sign in to comment.