Discard optimized containers with negative counts in UBJSON/BJData (#3491,#3492,#3490)
This commit is contained in:
parent
6a7392058e
commit
d0ed61eeb4
@ -2016,7 +2016,7 @@ class binary_reader
|
||||
case 'i':
|
||||
{
|
||||
std::int8_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -2027,7 +2027,7 @@ class binary_reader
|
||||
case 'I':
|
||||
{
|
||||
std::int16_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -2038,7 +2038,7 @@ class binary_reader
|
||||
case 'l':
|
||||
{
|
||||
std::int32_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -2049,7 +2049,7 @@ class binary_reader
|
||||
case 'L':
|
||||
{
|
||||
std::int64_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -2113,7 +2113,7 @@ class binary_reader
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1) || std::count(dim.begin(), dim.end(), 0)) // return normal array size if 1D row vector or total length is 0
|
||||
{
|
||||
result = dim.at(dim.size() - 1);
|
||||
return true;
|
||||
|
||||
@ -10490,7 +10490,7 @@ class binary_reader
|
||||
case 'i':
|
||||
{
|
||||
std::int8_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -10501,7 +10501,7 @@ class binary_reader
|
||||
case 'I':
|
||||
{
|
||||
std::int16_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -10512,7 +10512,7 @@ class binary_reader
|
||||
case 'l':
|
||||
{
|
||||
std::int32_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -10523,7 +10523,7 @@ class binary_reader
|
||||
case 'L':
|
||||
{
|
||||
std::int64_t number{};
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number)))
|
||||
if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number) || number < 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -10587,7 +10587,7 @@ class binary_reader
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1) || std::count(dim.begin(), dim.end(), 0)) // return normal array size if 1D row vector or total length is 0
|
||||
{
|
||||
result = dim.at(dim.size() - 1);
|
||||
return true;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user