Fixed #3221 (FP: Array 'arr[2147483648]' index 0 out of bounds in loop when size unknown to cppcheck)
This commit is contained in:
parent
24a2b6e6ba
commit
d7be62a6f9
|
@ -510,7 +510,7 @@ void CheckBufferOverrun::parse_for_body(const Token *tok2, const ArrayInfo &arra
|
|||
}
|
||||
|
||||
// skip 0 length arrays
|
||||
if (arrayInfo.num(0) && (min_index >= (int)arrayInfo.num(0) || max_index >= (int)arrayInfo.num(0))) {
|
||||
if (arrayInfo.num(0) && (min_index >= arrayInfo.num(0) || max_index >= arrayInfo.num(0))) {
|
||||
std::vector<MathLib::bigint> indexes;
|
||||
indexes.push_back(std::max(min_index, max_index));
|
||||
arrayIndexOutOfBoundsError(tok2, arrayInfo, indexes);
|
||||
|
|
|
@ -124,6 +124,7 @@ private:
|
|||
TEST_CASE(array_index_for); // FN: for,if
|
||||
TEST_CASE(array_index_for_neq); // #2211: Using != in condition
|
||||
TEST_CASE(array_index_for_question); // #2561: for, ?:
|
||||
TEST_CASE(array_index_vla_for); // #3221: access VLA inside for
|
||||
TEST_CASE(array_index_extern); // FP when using 'extern'. #1684
|
||||
TEST_CASE(array_index_cast); // FP after cast. #2841
|
||||
|
||||
|
@ -1591,6 +1592,17 @@ private:
|
|||
"}");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void array_index_vla_for() {
|
||||
// #3221 - access VLA inside for
|
||||
check("void f(int len) {\n"
|
||||
" char a[len];\n"
|
||||
" for (int i=0; i<7; ++i) {\n"
|
||||
" a[0] = 0;\n"
|
||||
" }\n"
|
||||
"}");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void array_index_extern() {
|
||||
// Ticket #1684. FP when using 'extern'.
|
||||
|
|
Loading…
Reference in New Issue