Fix bug with non-NUL-terminaed inputs in wxMBConvUTF8.
We read beyond the provided maximal length as we didn't update the remaining length while parsing the remaining bytes of an UTF-8-encoded code point. Fix this and add a test for it. Closes #15901. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75733 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1272,6 +1272,14 @@ size_t wxMBConvUTF8::ToWChar(wchar_t *buf, size_t n,
|
||||
wxUint32 res = cc & (0x3f >> cnt);
|
||||
while (cnt--)
|
||||
{
|
||||
if (!isNulTerminated && !srcLen)
|
||||
{
|
||||
// invalid UTF-8 sequence ending before the end of code
|
||||
// point.
|
||||
invalid = true;
|
||||
break;
|
||||
}
|
||||
|
||||
cc = *psz;
|
||||
if ((cc & 0xC0) != 0x80)
|
||||
{
|
||||
@@ -1281,6 +1289,8 @@ size_t wxMBConvUTF8::ToWChar(wchar_t *buf, size_t n,
|
||||
}
|
||||
|
||||
psz++;
|
||||
if (!isNulTerminated)
|
||||
srcLen--;
|
||||
res = (res << 6) | (cc & 0x3f);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user