evaluated i-tests (#344)

This commit is contained in:
Niels 2016-10-30 16:07:17 +01:00
parent 7b4e6cf705
commit 8d1e65f297
5 changed files with 46 additions and 19 deletions

View file

@ -8934,6 +8934,11 @@ basic_json_parser_66:
// skip the next 10 characters (xxxx\uyyyy) // skip the next 10 characters (xxxx\uyyyy)
i += 10; i += 10;
} }
else if (codepoint >= 0xDC00 and codepoint <= 0xDFFF)
{
// we found a lone low surrogate
throw std::invalid_argument("missing high surrogate");
}
else else
{ {
// add unicode character(s) // add unicode character(s)

View file

@ -8083,6 +8083,11 @@ class basic_json
// skip the next 10 characters (xxxx\uyyyy) // skip the next 10 characters (xxxx\uyyyy)
i += 10; i += 10;
} }
else if (codepoint >= 0xDC00 and codepoint <= 0xDFFF)
{
// we found a lone low surrogate
throw std::invalid_argument("missing high surrogate");
}
else else
{ {
// add unicode character(s) // add unicode character(s)

View file

@ -703,8 +703,8 @@ TEST_CASE("nst's JSONTestSuite")
"test/data/nst_json_testsuite/test_parsing/n_string_unicode_CapitalU.json", "test/data/nst_json_testsuite/test_parsing/n_string_unicode_CapitalU.json",
"test/data/nst_json_testsuite/test_parsing/n_string_with_trailing_garbage.json", "test/data/nst_json_testsuite/test_parsing/n_string_with_trailing_garbage.json",
//!"test/data/nst_json_testsuite/test_parsing/n_structure_100000_opening_arrays.json", //!"test/data/nst_json_testsuite/test_parsing/n_structure_100000_opening_arrays.json",
"test/data/nst_json_testsuite/test_parsing/n_structure_<.>.json", "test/data/nst_json_testsuite/test_parsing/n_structure_3C.3E.json",
"test/data/nst_json_testsuite/test_parsing/n_structure_<null>.json", "test/data/nst_json_testsuite/test_parsing/n_structure_3Cnull3E.json",
"test/data/nst_json_testsuite/test_parsing/n_structure_U+2060_word_joined.json", "test/data/nst_json_testsuite/test_parsing/n_structure_U+2060_word_joined.json",
"test/data/nst_json_testsuite/test_parsing/n_structure_UTF8_BOM_no_data.json", "test/data/nst_json_testsuite/test_parsing/n_structure_UTF8_BOM_no_data.json",
"test/data/nst_json_testsuite/test_parsing/n_structure_array_trailing_garbage.json", "test/data/nst_json_testsuite/test_parsing/n_structure_array_trailing_garbage.json",
@ -761,31 +761,22 @@ TEST_CASE("nst's JSONTestSuite")
} }
} }
SECTION("i") SECTION("i -> y")
{ {
for (auto filename : for (auto filename :
{ {
// we currently do not limit exponents
"test/data/nst_json_testsuite/test_parsing/i_number_neg_int_huge_exp.json", "test/data/nst_json_testsuite/test_parsing/i_number_neg_int_huge_exp.json",
"test/data/nst_json_testsuite/test_parsing/i_number_pos_double_huge_exp.json", "test/data/nst_json_testsuite/test_parsing/i_number_pos_double_huge_exp.json",
"test/data/nst_json_testsuite/test_parsing/i_object_key_lone_2nd_surrogate.json", // we do not pose a limit on nesting
//"test/data/nst_json_testsuite/test_parsing/i_string_1st_surrogate_but_2nd_missing.json", "test/data/nst_json_testsuite/test_parsing/i_structure_500_nested_arrays.json",
//"test/data/nst_json_testsuite/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json", // we silently ignore BOMs
//"test/data/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json", "test/data/nst_json_testsuite/test_parsing/i_structure_UTF-8_BOM_empty_object.json",
//"test/data/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_surrogate.json", // we accept and forward non-characters
//"test/data/nst_json_testsuite/test_parsing/i_string_UTF-8_invalid_sequence.json",
//"test/data/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json",
"test/data/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_pair.json",
//"test/data/nst_json_testsuite/test_parsing/i_string_incomplete_surrogates_escape_valid.json",
//"test/data/nst_json_testsuite/test_parsing/i_string_inverted_surrogates_U+1D11E.json",
"test/data/nst_json_testsuite/test_parsing/i_string_lone_second_surrogate.json",
//"test/data/nst_json_testsuite/test_parsing/i_string_not_in_unicode_range.json",
//"test/data/nst_json_testsuite/test_parsing/i_string_truncated-utf-8.json",
"test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+10FFFE_nonchar.json", "test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+10FFFE_nonchar.json",
"test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+1FFFE_nonchar.json", "test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+1FFFE_nonchar.json",
"test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+FDD0_nonchar.json", "test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+FDD0_nonchar.json",
"test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+FFFE_nonchar.json", "test/data/nst_json_testsuite/test_parsing/i_string_unicode_U+FFFE_nonchar.json"
"test/data/nst_json_testsuite/test_parsing/i_structure_500_nested_arrays.json",
"test/data/nst_json_testsuite/test_parsing/i_structure_UTF-8_BOM_empty_object.json"
} }
) )
{ {
@ -796,5 +787,31 @@ TEST_CASE("nst's JSONTestSuite")
} }
} }
SECTION("i -> n")
{
for (auto filename :
{
"test/data/nst_json_testsuite/test_parsing/i_object_key_lone_2nd_surrogate.json",
"test/data/nst_json_testsuite/test_parsing/i_string_1st_surrogate_but_2nd_missing.json",
"test/data/nst_json_testsuite/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json",
"test/data/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json",
"test/data/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_surrogate.json",
"test/data/nst_json_testsuite/test_parsing/i_string_UTF-8_invalid_sequence.json",
"test/data/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json",
"test/data/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_pair.json",
"test/data/nst_json_testsuite/test_parsing/i_string_incomplete_surrogates_escape_valid.json",
"test/data/nst_json_testsuite/test_parsing/i_string_inverted_surrogates_U+1D11E.json",
"test/data/nst_json_testsuite/test_parsing/i_string_lone_second_surrogate.json",
"test/data/nst_json_testsuite/test_parsing/i_string_not_in_unicode_range.json",
"test/data/nst_json_testsuite/test_parsing/i_string_truncated-utf-8.json"
}
)
{
CAPTURE(filename);
std::ifstream f(filename);
json j;
CHECK_THROWS_AS(j << f, std::invalid_argument);
}
}
} }
} }