[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 09/60] check-qjson: Cover escaped characters more
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH v2 09/60] check-qjson: Cover escaped characters more thoroughly, part 2 |
Date: |
Fri, 17 Aug 2018 17:05:08 +0200 |
Cover escaped single quote, surrogates, invalid escapes, and
noncharacters. This demonstrates that valid surrogate pairs are
misinterpreted, and invalid surrogates and noncharacters aren't
rejected.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
tests/check-qjson.c | 62 ++++++++++++++++++++++++++++++++++++++-------
1 file changed, 53 insertions(+), 9 deletions(-)
diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index 730de46815..ce843283eb 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -57,10 +57,49 @@ static void escaped_string(void)
int skip;
} test_cases[] = {
{ "\\b\\f\\n\\r\\t\\\\\\\"", "\b\f\n\r\t\\\"" },
- { "\\/", "/", .skip = 1 },
+ { "\\/\\'", "/'", .skip = 1 },
{ "single byte utf-8 \\u0020", "single byte utf-8 ", .skip = 1 },
{ "double byte utf-8 \\u00A2", "double byte utf-8 \xc2\xa2" },
{ "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 },
+ { "\\z", NULL },
+ { "\\ux", NULL },
+ { "\\u1x", NULL },
+ { "\\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},
{}
};
int i, j;
@@ -69,15 +108,20 @@ static void escaped_string(void)
for (i = 0; test_cases[i].json_in; i++) {
for (j = 0; j < 2; j++) {
- cstr = from_json_str(test_cases[i].json_in, &error_abort, j);
- g_assert_cmpstr(qstring_get_try_str(cstr),
- ==, test_cases[i].utf8_out);
- if (test_cases[i].skip == 0) {
- jstr = to_json_str(cstr);
- g_assert_cmpstr(jstr, ==, test_cases[i].json_in);
- g_free(jstr);
+ if (test_cases[i].utf8_out) {
+ cstr = from_json_str(test_cases[i].json_in, &error_abort, j);
+ g_assert_cmpstr(qstring_get_try_str(cstr),
+ ==, test_cases[i].utf8_out);
+ if (!test_cases[i].skip) {
+ jstr = to_json_str(cstr);
+ g_assert_cmpstr(jstr, ==, test_cases[i].json_in);
+ g_free(jstr);
+ }
+ qobject_unref(cstr);
+ } else {
+ cstr = from_json_str(test_cases[i].json_in, NULL, j);
+ g_assert(!cstr);
}
- qobject_unref(cstr);
}
}
}
--
2.17.1
- [Qemu-devel] [PATCH v2 12/60] check-qjson: Simplify utf8_string(), (continued)
- [Qemu-devel] [PATCH v2 12/60] check-qjson: Simplify utf8_string(), Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 08/60] check-qjson: Streamline escaped_string()'s test strings, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 02/60] check-qjson: Cover blank and lexically erroneous input, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 06/60] test-qga: Clean up how we test QGA synchronization, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 04/60] qmp-cmd-test: Split off qmp-test, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 05/60] qmp-test: Cover syntax and lexical errors, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 14/60] check-qjson qmp-test: Cover control characters more thoroughly, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 09/60] check-qjson: Cover escaped characters more thoroughly, part 2,
Markus Armbruster <=
- [Qemu-devel] [PATCH v2 42/60] json: Improve names of lexer states related to numbers, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 34/60] json: Don't pass null @tokens to json_parser_parse(), Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 23/60] json: Leave rejecting invalid UTF-8 to parser, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 30/60] json: remove useless return value from lexer/parser, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 25/60] json: Leave rejecting invalid escape sequences to parser, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 38/60] json: Pass lexical errors and limit violations to callback, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 44/60] json: Fix latent parser aborts at end of input, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 28/60] json: Fix \uXXXX for surrogate pairs, Markus Armbruster, 2018/08/17