mirror of https://github.com/python/cpython
Issue #17223: Fix PyUnicode_FromUnicode() on Windows (16-bit wchar_t type)
to reject invalid UTF-16 surrogate.
This commit is contained in:
parent
e5c0533b58
commit
313cac88c5
|
@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #17223: Fix PyUnicode_FromUnicode() on Windows (16-bit wchar_t type)
|
||||
to reject invalid UTF-16 surrogate.
|
||||
|
||||
- Issue #17032: The "global" in the "NameError: global name 'x' is not defined"
|
||||
error message has been removed. Patch by Ram Rachum.
|
||||
|
||||
|
|
|
@ -1384,13 +1384,18 @@ find_maxchar_surrogates(const wchar_t *begin, const wchar_t *end,
|
|||
|
||||
for (iter = begin; iter < end; ) {
|
||||
#if SIZEOF_WCHAR_T == 2
|
||||
if (Py_UNICODE_IS_HIGH_SURROGATE(iter[0])
|
||||
&& (iter+1) < end
|
||||
&& Py_UNICODE_IS_LOW_SURROGATE(iter[1]))
|
||||
{
|
||||
ch = Py_UNICODE_JOIN_SURROGATES(iter[0], iter[1]);
|
||||
++(*num_surrogates);
|
||||
iter += 2;
|
||||
if (Py_UNICODE_IS_HIGH_SURROGATE(iter[0])) {
|
||||
if ((iter+1) < end
|
||||
&& Py_UNICODE_IS_LOW_SURROGATE(iter[1]))
|
||||
{
|
||||
ch = Py_UNICODE_JOIN_SURROGATES(iter[0], iter[1]);
|
||||
++(*num_surrogates);
|
||||
iter += 2;
|
||||
}
|
||||
else {
|
||||
PyErr_SetString(PyExc_ValueError, "illegal UTF-16 surrogate");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue