Fixed #2561 (False positive on array index when using conditional operator)
This commit is contained in:
parent
d8119cd57a
commit
318f2e8a57
|
@ -464,6 +464,11 @@ void CheckBufferOverrun::parse_for_body(const Token *tok2, const ArrayInfo &arra
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: try to reduce false negatives. This is just a quick fix
|
||||||
|
// for TestBufferOverrun::array_index_for_question
|
||||||
|
if (tok2->str() == "?")
|
||||||
|
break;
|
||||||
|
|
||||||
if (Token::Match(tok2, "if|switch"))
|
if (Token::Match(tok2, "if|switch"))
|
||||||
{
|
{
|
||||||
if (bailoutIfSwitch(tok2, arrayInfo.varid))
|
if (bailoutIfSwitch(tok2, arrayInfo.varid))
|
||||||
|
|
|
@ -116,6 +116,7 @@ private:
|
||||||
TEST_CASE(array_index_for_break); // FP: for,break
|
TEST_CASE(array_index_for_break); // FP: for,break
|
||||||
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(buffer_overrun_1);
|
TEST_CASE(buffer_overrun_1);
|
||||||
TEST_CASE(buffer_overrun_2);
|
TEST_CASE(buffer_overrun_2);
|
||||||
|
@ -1381,6 +1382,18 @@ private:
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (error) Buffer access out-of-bounds: a\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (error) Buffer access out-of-bounds: a\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void array_index_for_question()
|
||||||
|
{
|
||||||
|
// Ticket #2561 - using ?: inside for loop
|
||||||
|
check("void f() {\n"
|
||||||
|
" int a[10];\n"
|
||||||
|
" for (int i = 0; i != 10; ++i) {\n"
|
||||||
|
" i == 0 ? 0 : a[i-1];\n"
|
||||||
|
" }\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void buffer_overrun_1()
|
void buffer_overrun_1()
|
||||||
{
|
{
|
||||||
check("void f()\n"
|
check("void f()\n"
|
||||||
|
|
Loading…
Reference in New Issue