Unverified Commit 893eda83 authored by Niels Lohmann's avatar Niels Lohmann Committed by GitHub

Merge pull request #2294 from jprochazk/develop

fix eof for get_binary and get_string
parents b1da58b7 851315c8
...@@ -2271,15 +2271,16 @@ class binary_reader ...@@ -2271,15 +2271,16 @@ class binary_reader
string_t& result) string_t& result)
{ {
bool success = true; bool success = true;
std::generate_n(std::back_inserter(result), len, [this, &success, &format]() for (NumberType i = 0; i < len; i++)
{ {
get(); get();
if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string")))
{ {
success = false; success = false;
break;
} }
return std::char_traits<char_type>::to_char_type(current); result.push_back(std::char_traits<char_type>::to_char_type(current));
}); };
return success; return success;
} }
...@@ -2303,15 +2304,16 @@ class binary_reader ...@@ -2303,15 +2304,16 @@ class binary_reader
binary_t& result) binary_t& result)
{ {
bool success = true; bool success = true;
std::generate_n(std::back_inserter(result), len, [this, &success, &format]() for (NumberType i = 0; i < len; i++)
{ {
get(); get();
if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary")))
{ {
success = false; success = false;
break;
} }
return static_cast<std::uint8_t>(current); result.push_back(static_cast<std::uint8_t>(current));
}); }
return success; return success;
} }
......
...@@ -8143,15 +8143,16 @@ class binary_reader ...@@ -8143,15 +8143,16 @@ class binary_reader
string_t& result) string_t& result)
{ {
bool success = true; bool success = true;
std::generate_n(std::back_inserter(result), len, [this, &success, &format]() for (NumberType i = 0; i < len; i++)
{ {
get(); get();
if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string")))
{ {
success = false; success = false;
break;
} }
return std::char_traits<char_type>::to_char_type(current); result.push_back(std::char_traits<char_type>::to_char_type(current));
}); };
return success; return success;
} }
...@@ -8175,15 +8176,16 @@ class binary_reader ...@@ -8175,15 +8176,16 @@ class binary_reader
binary_t& result) binary_t& result)
{ {
bool success = true; bool success = true;
std::generate_n(std::back_inserter(result), len, [this, &success, &format]() for (NumberType i = 0; i < len; i++)
{ {
get(); get();
if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary")))
{ {
success = false; success = false;
break;
} }
return static_cast<std::uint8_t>(current); result.push_back(static_cast<std::uint8_t>(current));
}); }
return success; return success;
} }
......
...@@ -1954,6 +1954,16 @@ TEST_CASE("regression tests") ...@@ -1954,6 +1954,16 @@ TEST_CASE("regression tests")
auto val = j.value("x", defval); auto val = j.value("x", defval);
auto val2 = j.value("y", defval); auto val2 = j.value("y", defval);
} }
SECTION("issue #2293 - eof doesnt cause parsing to stop")
{
std::vector<uint8_t> data =
{
0x7B, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x4F, 0x42
};
json result = json::from_cbor(data, true, false);
CHECK(result.is_discarded());
}
} }
#if !defined(JSON_NOEXCEPTION) #if !defined(JSON_NOEXCEPTION)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment