🐛 fix for #962

Added out_of_range exception for UBJSON containers with sizes that exceed the target container's max_size.
This commit is contained in:
Niels Lohmann 2018-02-06 22:38:53 +01:00
parent 8b457ace25
commit 33a9b00ce6
No known key found for this signature in database
GPG key ID: 7F3CEA63AE251B69
5 changed files with 53 additions and 6 deletions

View file

@ -1246,14 +1246,22 @@ class binary_reader
if (size_and_type.first != string_t::npos)
{
if (JSON_UNLIKELY(size_and_type.first > result.max_size()))
{
JSON_THROW(out_of_range::create(408,
"excessive array size: " + std::to_string(size_and_type.first)));
}
if (size_and_type.second != 0)
{
if (size_and_type.second != 'N')
{
std::generate_n(std::back_inserter(*result.m_value.array),
size_and_type.first, [this, size_and_type]()
{
return get_ubjson_value(size_and_type.second);
});
{
return get_ubjson_value(size_and_type.second);
});
}
}
else
{
@ -1283,6 +1291,12 @@ class binary_reader
if (size_and_type.first != string_t::npos)
{
if (JSON_UNLIKELY(size_and_type.first > result.max_size()))
{
JSON_THROW(out_of_range::create(408,
"excessive object size: " + std::to_string(size_and_type.first)));
}
if (size_and_type.second != 0)
{
std::generate_n(std::inserter(*result.m_value.object,