diff --git a/include/nlohmann/detail/view/errors.hpp b/include/nlohmann/detail/view/errors.hpp index 2b48d04b1..ff5816efd 100644 --- a/include/nlohmann/detail/view/errors.hpp +++ b/include/nlohmann/detail/view/errors.hpp @@ -55,9 +55,12 @@ template { if (f.code == error_code::input_too_large) { + // LCOV_EXCL_START (4 GiB) NLOHMANN_VIEW_THROW(out_of_range::create(416, "input of 4 GiB or more is not supported by json_document", nullptr)); + // LCOV_EXCL_STOP } const BasicJsonType accepted = BasicJsonType::parse(src, src + size, nullptr, true, ignore_comments, ignore_trailing_commas); + // LCOV_EXCL_START (only if parse() accepts what the view rejects: a bug) static_cast(accepted); position_t pos; @@ -74,6 +77,7 @@ template } pos.chars_read_current_line = off + 1 - line_start; NLOHMANN_VIEW_THROW(parse_error::create(101, pos, "syntax error while parsing value", nullptr)); + // LCOV_EXCL_STOP } } // namespace view diff --git a/include/nlohmann/json_view.hpp b/include/nlohmann/json_view.hpp index 4993eeb18..071cf61be 100644 --- a/include/nlohmann/json_view.hpp +++ b/include/nlohmann/json_view.hpp @@ -459,7 +459,7 @@ class basic_json_document bool ok = false; if (NLOHMANN_VIEW_UNLIKELY(size >= 0xFFFFFFF0u)) { - failure.code = detail::view::error_code::input_too_large; + failure.code = detail::view::error_code::input_too_large; // LCOV_EXCL_LINE (4 GiB) } else { diff --git a/single_include/nlohmann/json_view.hpp b/single_include/nlohmann/json_view.hpp index f24b5036d..63856eca0 100644 --- a/single_include/nlohmann/json_view.hpp +++ b/single_include/nlohmann/json_view.hpp @@ -1635,9 +1635,12 @@ template { if (f.code == error_code::input_too_large) { + // LCOV_EXCL_START (4 GiB) NLOHMANN_VIEW_THROW(out_of_range::create(416, "input of 4 GiB or more is not supported by json_document", nullptr)); + // LCOV_EXCL_STOP } const BasicJsonType accepted = BasicJsonType::parse(src, src + size, nullptr, true, ignore_comments, ignore_trailing_commas); + // LCOV_EXCL_START (only if parse() accepts what the view rejects: a bug) static_cast(accepted); position_t pos; @@ -1654,6 +1657,7 @@ template } pos.chars_read_current_line = off + 1 - line_start; NLOHMANN_VIEW_THROW(parse_error::create(101, pos, "syntax error while parsing value", nullptr)); + // LCOV_EXCL_STOP } } // namespace view @@ -2486,7 +2490,7 @@ class basic_json_document bool ok = false; if (NLOHMANN_VIEW_UNLIKELY(size >= 0xFFFFFFF0u)) { - failure.code = detail::view::error_code::input_too_large; + failure.code = detail::view::error_code::input_too_large; // LCOV_EXCL_LINE (4 GiB) } else { diff --git a/tests/src/unit-json_view.cpp b/tests/src/unit-json_view.cpp index 37b861e45..ce8c66fe9 100644 --- a/tests/src/unit-json_view.cpp +++ b/tests/src/unit-json_view.cpp @@ -382,6 +382,11 @@ TEST_CASE("json_view") CHECK(reused.memory_usage() < grown); CHECK(reused.root().materialize() == json::parse(smaller)); + // an empty document has nothing to release + json_document empty; + empty.shrink_to_fit(); + CHECK(empty.memory_usage() == 0); + // a small document stays in the storage block of the header json_document small = json_document::parse("[1,[2,3],{\"a\":\"b\\n\"}]"); // NOLINT(modernize-raw-string-literal) small.shrink_to_fit();