From f7b9d4d726542ac1fab8a5af501ffef378420f9e Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Thu, 11 Aug 2011 17:57:54 -0400 Subject: [PATCH] fix #2991 (segmentation fault of cppcheck ( ::y(){x} )) --- lib/symboldatabase.cpp | 4 ++++ test/testsymboldatabase.cpp | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 8bb492fa3..501044f1b 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -1008,6 +1008,10 @@ void SymbolDatabase::addFunction(Scope **scope, const Token **tok, const Token * else tok1 = (*tok)->tokAt(-2); + // syntax error? + if (!tok1) + return; + // back up to head of path while (tok1 && tok1->previous() && tok1->previous()->str() == "::") { diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 0c81cc14f..69d970c88 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -121,6 +121,7 @@ private: TEST_CASE(symboldatabase16); // ticket #2637 TEST_CASE(symboldatabase17); // ticket #2657 TEST_CASE(symboldatabase18); // ticket #2865 + TEST_CASE(symboldatabase19); // ticket #2991 (segmentation fault) } void test_isVariableDeclarationCanHandleNull() @@ -878,6 +879,14 @@ private: ASSERT_EQUALS("", errout.str()); } + void symboldatabase19() + { + // ticket #2991 - segmentation fault + check("::y(){x}\n"); + + ASSERT_EQUALS("", errout.str()); + } + }; REGISTER_TEST(TestSymbolDatabase)