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':
|
case 'i':
|
||||||
{
|
{
|
||||||
std::int8_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2027,7 +2027,7 @@ class binary_reader
|
|||||||
case 'I':
|
case 'I':
|
||||||
{
|
{
|
||||||
std::int16_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2038,7 +2038,7 @@ class binary_reader
|
|||||||
case 'l':
|
case 'l':
|
||||||
{
|
{
|
||||||
std::int32_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2049,7 +2049,7 @@ class binary_reader
|
|||||||
case 'L':
|
case 'L':
|
||||||
{
|
{
|
||||||
std::int64_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2113,7 +2113,7 @@ class binary_reader
|
|||||||
{
|
{
|
||||||
return false;
|
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);
|
result = dim.at(dim.size() - 1);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -10490,7 +10490,7 @@ class binary_reader
|
|||||||
case 'i':
|
case 'i':
|
||||||
{
|
{
|
||||||
std::int8_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -10501,7 +10501,7 @@ class binary_reader
|
|||||||
case 'I':
|
case 'I':
|
||||||
{
|
{
|
||||||
std::int16_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -10512,7 +10512,7 @@ class binary_reader
|
|||||||
case 'l':
|
case 'l':
|
||||||
{
|
{
|
||||||
std::int32_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -10523,7 +10523,7 @@ class binary_reader
|
|||||||
case 'L':
|
case 'L':
|
||||||
{
|
{
|
||||||
std::int64_t number{};
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -10587,7 +10587,7 @@ class binary_reader
|
|||||||
{
|
{
|
||||||
return false;
|
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);
|
result = dim.at(dim.size() - 1);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user