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
|
// 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;
|
std::vector<MathLib::bigint> indexes;
|
||||||
indexes.push_back(std::max(min_index, max_index));
|
indexes.push_back(std::max(min_index, max_index));
|
||||||
arrayIndexOutOfBoundsError(tok2, arrayInfo, indexes);
|
arrayIndexOutOfBoundsError(tok2, arrayInfo, indexes);
|
||||||
|
|
|
@ -124,6 +124,7 @@ private:
|
||||||
TEST_CASE(array_index_for); // FN: for,if
|
TEST_CASE(array_index_for); // FN: for,if
|
||||||
TEST_CASE(array_index_for_neq); // #2211: Using != in condition
|
TEST_CASE(array_index_for_neq); // #2211: Using != in condition
|
||||||
TEST_CASE(array_index_for_question); // #2561: for, ?:
|
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_extern); // FP when using 'extern'. #1684
|
||||||
TEST_CASE(array_index_cast); // FP after cast. #2841
|
TEST_CASE(array_index_cast); // FP after cast. #2841
|
||||||
|
|
||||||
|
@ -1591,6 +1592,17 @@ private:
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
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() {
|
void array_index_extern() {
|
||||||
// Ticket #1684. FP when using 'extern'.
|
// Ticket #1684. FP when using 'extern'.
|
||||||
|
|
Loading…
Reference in New Issue