mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
json: Reject invalid \uXXXX, fix \u0000
The JSON parser translates invalid \uXXXX to garbage instead of rejecting it, and swallows \u0000. Fix by using mod_utf8_encode() instead of flawed wchar_to_utf8(). Valid surrogate pairs are now differently broken: they're rejected instead of translated to garbage. The next commit will fix them. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20180823164025.12553-29-armbru@redhat.com>
This commit is contained in:
parent
de6decfe8e
commit
46a628b139
2 changed files with 17 additions and 59 deletions
|
@ -64,7 +64,7 @@ static void escaped_string(void)
|
|||
{ "triple byte utf-8 \\u20AC", "triple byte utf-8 \xe2\x82\xac" },
|
||||
{ "quadruple byte utf-8 \\uD834\\uDD1E", /* U+1D11E */
|
||||
/* bug: want \xF0\x9D\x84\x9E */
|
||||
"quadruple byte utf-8 \xED\xA0\xB4\xED\xB4\x9E", .skip = 1 },
|
||||
NULL },
|
||||
{ "\\", NULL },
|
||||
{ "\\z", NULL },
|
||||
{ "\\ux", NULL },
|
||||
|
@ -72,35 +72,16 @@ static void escaped_string(void)
|
|||
{ "\\u12x", NULL },
|
||||
{ "\\u123x", NULL },
|
||||
{ "\\u12345", "\341\210\2645" },
|
||||
{ "\\u0000x", "x", .skip = 1}, /* bug: want \xC0\x80x */
|
||||
{ "unpaired leading surrogate \\uD800",
|
||||
/* bug: not rejected */
|
||||
"unpaired leading surrogate \355\240\200", .skip = 1 },
|
||||
{ "unpaired leading surrogate \\uD800\\uCAFE",
|
||||
/* bug: not rejected */
|
||||
"unpaired leading surrogate \355\240\200\354\253\276", .skip = 1 },
|
||||
{ "unpaired leading surrogate \\uD800\\uD801\\uDC02",
|
||||
/* bug: not rejected */
|
||||
"unpaired leading surrogate \355\240\200\355\240\201\355\260\202",
|
||||
.skip = 1 },
|
||||
{ "unpaired trailing surrogate \\uDC00",
|
||||
/* bug: not rejected */
|
||||
"unpaired trailing surrogate \355\260\200", .skip = 1},
|
||||
{ "backward surrogate pair \\uDC00\\uD800",
|
||||
/* bug: not rejected */
|
||||
"backward surrogate pair \355\260\200\355\240\200", .skip = 1},
|
||||
{ "noncharacter U+FDD0 \\uFDD0",
|
||||
/* bug: not rejected */
|
||||
"noncharacter U+FDD0 \xEF\xB7\x90", .skip = 1},
|
||||
{ "noncharacter U+FDEF \\uFDEF",
|
||||
/* bug: not rejected */
|
||||
"noncharacter U+FDEF \xEF\xB7\xAF", .skip = 1},
|
||||
{ "noncharacter U+1FFFE \\uD87F\\uDFFE",
|
||||
/* bug: not rejected */
|
||||
"noncharacter U+1FFFE \xED\xA1\xBF\xED\xBF\xBE", .skip = 1},
|
||||
{ "noncharacter U+10FFFF \\uDC3F\\uDFFF",
|
||||
/* bug: not rejected */
|
||||
"noncharacter U+10FFFF \xED\xB0\xBF\xED\xBF\xBF", .skip = 1},
|
||||
{ "\\u0000x", "\xC0\x80x" },
|
||||
{ "unpaired leading surrogate \\uD800", NULL },
|
||||
{ "unpaired leading surrogate \\uD800\\uCAFE", NULL },
|
||||
{ "unpaired leading surrogate \\uD800\\uD801\\uDC02", NULL },
|
||||
{ "unpaired trailing surrogate \\uDC00", NULL },
|
||||
{ "backward surrogate pair \\uDC00\\uD800", NULL },
|
||||
{ "noncharacter U+FDD0 \\uFDD0", NULL },
|
||||
{ "noncharacter U+FDEF \\uFDEF", NULL },
|
||||
{ "noncharacter U+1FFFE \\uD87F\\uDFFE", NULL },
|
||||
{ "noncharacter U+10FFFF \\uDC3F\\uDFFF", NULL },
|
||||
{}
|
||||
};
|
||||
int i, j;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue