fix #2991 (segmentation fault of cppcheck ( ::y(){x} ))

This commit is contained in:
Robert Reif 2011-08-11 17:57:54 -04:00
parent 2ef4e6fb59
commit f7b9d4d726
2 changed files with 13 additions and 0 deletions

View File

@ -1008,6 +1008,10 @@ void SymbolDatabase::addFunction(Scope **scope, const Token **tok, const Token *
else else
tok1 = (*tok)->tokAt(-2); tok1 = (*tok)->tokAt(-2);
// syntax error?
if (!tok1)
return;
// back up to head of path // back up to head of path
while (tok1 && tok1->previous() && tok1->previous()->str() == "::") while (tok1 && tok1->previous() && tok1->previous()->str() == "::")
{ {

View File

@ -121,6 +121,7 @@ private:
TEST_CASE(symboldatabase16); // ticket #2637 TEST_CASE(symboldatabase16); // ticket #2637
TEST_CASE(symboldatabase17); // ticket #2657 TEST_CASE(symboldatabase17); // ticket #2657
TEST_CASE(symboldatabase18); // ticket #2865 TEST_CASE(symboldatabase18); // ticket #2865
TEST_CASE(symboldatabase19); // ticket #2991 (segmentation fault)
} }
void test_isVariableDeclarationCanHandleNull() void test_isVariableDeclarationCanHandleNull()
@ -878,6 +879,14 @@ private:
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
} }
void symboldatabase19()
{
// ticket #2991 - segmentation fault
check("::y(){x}\n");
ASSERT_EQUALS("", errout.str());
}
}; };
REGISTER_TEST(TestSymbolDatabase) REGISTER_TEST(TestSymbolDatabase)