mirror of
https://github.com/python/cpython.git
synced 2025-12-19 23:23:37 +00:00
[3.6] bpo-30708: Check for null characters in PyUnicode_AsWideCharString(). (GH-2285) (#2443)
Raise a ValueError if the second argument is NULL and the wchar_t\*
string contains null characters..
(cherry picked from commit e613e6add5)
This commit is contained in:
parent
35d2ca2b94
commit
0edffa3073
12 changed files with 50 additions and 20 deletions
|
|
@ -3017,6 +3017,37 @@ PyUnicode_AsWideCharString(PyObject *unicode,
|
|||
return buffer;
|
||||
}
|
||||
|
||||
wchar_t*
|
||||
_PyUnicode_AsWideCharString(PyObject *unicode)
|
||||
{
|
||||
const wchar_t *wstr;
|
||||
wchar_t *buffer;
|
||||
Py_ssize_t buflen;
|
||||
|
||||
if (unicode == NULL) {
|
||||
PyErr_BadInternalCall();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
wstr = PyUnicode_AsUnicodeAndSize(unicode, &buflen);
|
||||
if (wstr == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
if (wcslen(wstr) != (size_t)buflen) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"embedded null character");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buffer = PyMem_NEW(wchar_t, buflen + 1);
|
||||
if (buffer == NULL) {
|
||||
PyErr_NoMemory();
|
||||
return NULL;
|
||||
}
|
||||
memcpy(buffer, wstr, (buflen + 1) * sizeof(wchar_t));
|
||||
return buffer;
|
||||
}
|
||||
|
||||
#endif /* HAVE_WCHAR_H */
|
||||
|
||||
PyObject *
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue