diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index f5a0eb8b0..194db6fca 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -1305,7 +1305,7 @@ bool SymbolDatabase::arrayDimensions(std::vector &dimensions, const T const Token *dim = tok; - while (dim->str() == "[" && dim->next() && dim->next()->str() != "]") + while (dim && dim->next() && dim->str() == "[" && dim->next()->str() != "]") { Dimension dimension; dimension.num = 0; diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index d25530ae0..0c81cc14f 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -120,6 +120,7 @@ private: TEST_CASE(symboldatabase15); // ticket #2591 TEST_CASE(symboldatabase16); // ticket #2637 TEST_CASE(symboldatabase17); // ticket #2657 + TEST_CASE(symboldatabase18); // ticket #2865 } void test_isVariableDeclarationCanHandleNull() @@ -869,6 +870,14 @@ private: ASSERT_EQUALS("", errout.str()); } + void symboldatabase18() + { + // ticket #2865 - segmentation fault + check("char a[1]\n"); + + ASSERT_EQUALS("", errout.str()); + } + }; REGISTER_TEST(TestSymbolDatabase)