Discard optimized containers with negative counts in UBJSON/BJData (#3491,#3492,#3490)

This commit is contained in:
Qianqian Fang 2022-05-17 17:41:13 -04:00
parent 6a7392058e
commit d0ed61eeb4
2 changed files with 10 additions and 10 deletions

View File

@ -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;

View File

@ -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;