diff options
author | Markus Armbruster <armbru@redhat.com> | 2018-08-23 18:39:55 +0200 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2018-08-24 20:26:37 +0200 |
commit | 46a628b1398ae6a58d6847223736431225c4c0cc (patch) | |
tree | 53e184c57fb6767ec72bb336e5770f65f9f969c8 /tests/check-qjson.c | |
parent | de6decfe8e2939464fc27ac2ab4ef87689329fec (diff) |
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>
Diffstat (limited to 'tests/check-qjson.c')
-rw-r--r-- | tests/check-qjson.c | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/tests/check-qjson.c b/tests/check-qjson.c index 3abf12b4d2..4abb5847ad 100644 --- a/tests/check-qjson.c +++ b/tests/check-qjson.c @@ -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; |