Fixed #2328 (false positive: buffer overrun (for loop with a break => the end value is not reached))
This commit is contained in:
parent
afbf5a8ef3
commit
8247270f35
|
@ -729,6 +729,14 @@ void CheckBufferOverrun::checkScope(const Token *tok, const std::vector<std::str
|
|||
{
|
||||
const Token *tok2 = tok->tokAt(2);
|
||||
|
||||
// Check if there is a break in the body..
|
||||
{
|
||||
const Token *bodyStart = tok->next()->link()->next();
|
||||
const Token *bodyEnd = bodyStart->link();
|
||||
if (Token::findmatch(bodyStart, "break ;", bodyEnd))
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned int counter_varid = 0;
|
||||
std::string min_counter_value;
|
||||
std::string max_counter_value;
|
||||
|
@ -898,6 +906,14 @@ void CheckBufferOverrun::checkScope(const Token *tok, const ArrayInfo &arrayInfo
|
|||
{
|
||||
const Token *tok2 = tok->tokAt(2);
|
||||
|
||||
// Check if there is a break in the body..
|
||||
{
|
||||
const Token *bodyStart = tok->next()->link()->next();
|
||||
const Token *bodyEnd = bodyStart->link();
|
||||
if (Token::findmatch(bodyStart, "break ;", bodyEnd))
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned int counter_varid = 0;
|
||||
std::string min_counter_value;
|
||||
std::string max_counter_value;
|
||||
|
|
|
@ -112,6 +112,7 @@ private:
|
|||
TEST_CASE(array_index_negative);
|
||||
TEST_CASE(array_index_for_decr);
|
||||
TEST_CASE(array_index_varnames); // FP: struct member. #1576
|
||||
TEST_CASE(array_index_for_break); // FP: for,break
|
||||
|
||||
TEST_CASE(buffer_overrun_1);
|
||||
TEST_CASE(buffer_overrun_2);
|
||||
|
@ -1303,6 +1304,21 @@ private:
|
|||
}
|
||||
|
||||
|
||||
void array_index_for_break()
|
||||
{
|
||||
check("void f() {\n"
|
||||
" int a[2];\n"
|
||||
" for (int i = 0; i <= 2; ++i) {\n"
|
||||
" a[i] = 0;\n"
|
||||
" if (i==1) {\n"
|
||||
" break;\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
|
||||
void buffer_overrun_1()
|
||||
{
|
||||
check("void f()\n"
|
||||
|
|
Loading…
Reference in New Issue