Fixed #1684 (false positive: buffer access out of bounds when using extern variable declaration)
This commit is contained in:
parent
4c6858fa9c
commit
56d176e1ce
|
@ -4381,12 +4381,18 @@ void Tokenizer::simplifyVarDecl()
|
|||
}
|
||||
}
|
||||
|
||||
else if (Token::Match(tok2, "%type% %var% [ %num% ] ,|=") ||
|
||||
Token::Match(tok2, "%type% %var% [ %var% ] ,|="))
|
||||
else if (Token::Match(tok2, "%type% %var% [ %num% ] ,|=|[") ||
|
||||
Token::Match(tok2, "%type% %var% [ %var% ] ,|=|["))
|
||||
{
|
||||
tok2 = tok2->tokAt(5); // The ',' token
|
||||
while (Token::Match(tok2, "[ %num% ]") || Token::Match(tok2, "[ %var% ]"))
|
||||
tok2 = tok2->tokAt(3);
|
||||
if (!Token::Match(tok2, "=|,"))
|
||||
{
|
||||
tok2 = NULL;
|
||||
}
|
||||
|
||||
if (tok2->str() == "=")
|
||||
if (tok2 && tok2->str() == "=")
|
||||
{
|
||||
while (tok2 && tok2->str() != ",")
|
||||
{
|
||||
|
|
|
@ -177,6 +177,7 @@ private:
|
|||
TEST_CASE(vardecl8);
|
||||
TEST_CASE(vardecl9);
|
||||
TEST_CASE(vardecl10);
|
||||
TEST_CASE(vardecl11);
|
||||
TEST_CASE(vardecl_stl);
|
||||
TEST_CASE(vardecl_template);
|
||||
TEST_CASE(volatile_variables);
|
||||
|
@ -2794,6 +2795,13 @@ private:
|
|||
ASSERT_EQUALS(code, tokenizeAndStringify(code));
|
||||
}
|
||||
|
||||
void vardecl11()
|
||||
{
|
||||
// ticket #1684
|
||||
const char code[] = "char a[5][8], b[5][8];";
|
||||
ASSERT_EQUALS("char a [ 5 ] [ 8 ] ; char b [ 5 ] [ 8 ] ;", tokenizeAndStringify(code));
|
||||
}
|
||||
|
||||
void volatile_variables()
|
||||
{
|
||||
const char code[] = "volatile int a=0;\n"
|
||||
|
|
Loading…
Reference in New Issue