fix a serious symbol database bug where parts of a function could be skipped
This commit is contained in:
parent
2f0fc9444f
commit
6f3131da8c
|
@ -591,7 +591,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
|
||||||
}
|
}
|
||||||
else if (tok->str() == "{")
|
else if (tok->str() == "{")
|
||||||
{
|
{
|
||||||
if (!Token::Match(tok->previous(), "=|,|{"))
|
if (!Token::Match(tok->previous(), "=|,"))
|
||||||
{
|
{
|
||||||
scopeList.push_back(Scope(this, tok, scope, Scope::eUnconditional, tok));
|
scopeList.push_back(Scope(this, tok, scope, Scope::eUnconditional, tok));
|
||||||
scope = &scopeList.back();
|
scope = &scopeList.back();
|
||||||
|
|
|
@ -41,6 +41,7 @@ private:
|
||||||
TEST_CASE(zeroDiv2);
|
TEST_CASE(zeroDiv2);
|
||||||
TEST_CASE(zeroDiv3);
|
TEST_CASE(zeroDiv3);
|
||||||
TEST_CASE(zeroDiv4);
|
TEST_CASE(zeroDiv4);
|
||||||
|
TEST_CASE(zeroDiv5);
|
||||||
|
|
||||||
TEST_CASE(sprintf1); // Dangerous usage of sprintf
|
TEST_CASE(sprintf1); // Dangerous usage of sprintf
|
||||||
TEST_CASE(sprintf2);
|
TEST_CASE(sprintf2);
|
||||||
|
@ -354,6 +355,15 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void zeroDiv5()
|
||||||
|
{
|
||||||
|
check("void f()\n"
|
||||||
|
"{ { {\n"
|
||||||
|
" long a = b / 0;\n"
|
||||||
|
"} } }\n");
|
||||||
|
ASSERT_EQUALS("[test.cpp:3]: (error) Division by zero\n", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void sprintfUsage(const char code[])
|
void sprintfUsage(const char code[])
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue