diff --git a/include/nlohmann/detail/input/binary_reader.hpp b/include/nlohmann/detail/input/binary_reader.hpp index 403a4d01..6f91f0df 100644 --- a/include/nlohmann/detail/input/binary_reader.hpp +++ b/include/nlohmann/detail/input/binary_reader.hpp @@ -300,7 +300,10 @@ class binary_reader if (not is_array) { - sax->key(key); + if (not sax->key(key)) + { + return false; + } } if (JSON_UNLIKELY(not parse_bson_element_internal(element_type, element_type_parse_position))) diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index 1e7cf51e..931e7b36 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -6635,7 +6635,10 @@ class binary_reader if (not is_array) { - sax->key(key); + if (not sax->key(key)) + { + return false; + } } if (JSON_UNLIKELY(not parse_bson_element_internal(element_type, element_type_parse_position))) diff --git a/test/src/unit-bson.cpp b/test/src/unit-bson.cpp index 406f0800..4cd2f6ca 100644 --- a/test/src/unit-bson.cpp +++ b/test/src/unit-bson.cpp @@ -752,6 +752,28 @@ TEST_CASE("Incomplete BSON Input") SaxCountdown scp(0); CHECK(not json::sax_parse(incomplete_bson, &scp, json::input_format_t::bson)); } + + SECTION("Improve coverage") + { + SECTION("key") + { + json j = {{"key", "value"}}; + auto bson_vec = json::to_bson(j); + SaxCountdown scp(2); + CHECK(not json::sax_parse(bson_vec, &scp, json::input_format_t::bson)); + } + + SECTION("array") + { + json j = + { + { "entry", json::array() } + }; + auto bson_vec = json::to_bson(j); + SaxCountdown scp(2); + CHECK(not json::sax_parse(bson_vec, &scp, json::input_format_t::bson)); + } + } } TEST_CASE("Unsupported BSON input")