🚧 WIP for #4552
This commit is contained in:
parent
30cd44df95
commit
4d67e127aa
@ -529,6 +529,12 @@ class serializer
|
|||||||
// thus removing/ignoring the invalid characters
|
// thus removing/ignoring the invalid characters
|
||||||
bytes = bytes_after_last_accept;
|
bytes = bytes_after_last_accept;
|
||||||
|
|
||||||
|
// fix for #4552
|
||||||
|
if (error_handler == error_handler_t::ignore)
|
||||||
|
{
|
||||||
|
bytes += undumped_chars;
|
||||||
|
}
|
||||||
|
|
||||||
if (error_handler == error_handler_t::replace)
|
if (error_handler == error_handler_t::replace)
|
||||||
{
|
{
|
||||||
// add a replacement character
|
// add a replacement character
|
||||||
|
|||||||
@ -18816,6 +18816,12 @@ class serializer
|
|||||||
// thus removing/ignoring the invalid characters
|
// thus removing/ignoring the invalid characters
|
||||||
bytes = bytes_after_last_accept;
|
bytes = bytes_after_last_accept;
|
||||||
|
|
||||||
|
// fix for #4552 - discussion pending
|
||||||
|
if (error_handler == error_handler_t::ignore)
|
||||||
|
{
|
||||||
|
bytes += undumped_chars;
|
||||||
|
}
|
||||||
|
|
||||||
if (error_handler == error_handler_t::replace)
|
if (error_handler == error_handler_t::replace)
|
||||||
{
|
{
|
||||||
// add a replacement character
|
// add a replacement character
|
||||||
|
|||||||
@ -995,6 +995,14 @@ TEST_CASE("regression tests 2")
|
|||||||
CHECK(p.x == 1);
|
CHECK(p.x == 1);
|
||||||
CHECK(p.y == 2);
|
CHECK(p.y == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("issue #4552 - UTF-8 invalid characters are not always ignored when dumping with error_handler_t::ignore")
|
||||||
|
{
|
||||||
|
nlohmann::json node;
|
||||||
|
node["test"] = "test\334\005";
|
||||||
|
const auto test_dump = node.dump(-1, ' ', false, nlohmann::json::error_handler_t::ignore);
|
||||||
|
CHECK(test_dump == "{\"test\":\"test\334\\u0005\"}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
||||||
|
|||||||
@ -107,7 +107,11 @@ TEST_CASE("serialization")
|
|||||||
|
|
||||||
CHECK_THROWS_WITH_AS(j.dump(), "[json.exception.type_error.316] invalid UTF-8 byte at index 5: 0x34", json::type_error&);
|
CHECK_THROWS_WITH_AS(j.dump(), "[json.exception.type_error.316] invalid UTF-8 byte at index 5: 0x34", json::type_error&);
|
||||||
CHECK_THROWS_AS(j.dump(1, ' ', false, json::error_handler_t::strict), json::type_error&);
|
CHECK_THROWS_AS(j.dump(1, ' ', false, json::error_handler_t::strict), json::type_error&);
|
||||||
CHECK(j.dump(-1, ' ', false, json::error_handler_t::ignore) == "\"123456\"");
|
|
||||||
|
// see pending discussion at #4452
|
||||||
|
// CHECK(j.dump(-1, ' ', false, json::error_handler_t::ignore) == "\"123456\"");
|
||||||
|
CHECK(j.dump(-1, ' ', false, json::error_handler_t::ignore) == "\"123\xF1\xB0\x34\x35\x36\"");
|
||||||
|
|
||||||
CHECK(j.dump(-1, ' ', false, json::error_handler_t::replace) == "\"123\xEF\xBF\xBD\x34\x35\x36\"");
|
CHECK(j.dump(-1, ' ', false, json::error_handler_t::replace) == "\"123\xEF\xBF\xBD\x34\x35\x36\"");
|
||||||
CHECK(j.dump(-1, ' ', true, json::error_handler_t::replace) == "\"123\\ufffd456\"");
|
CHECK(j.dump(-1, ' ', true, json::error_handler_t::replace) == "\"123\\ufffd456\"");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user