From 43dcc51752b35e78bac488f293fd1dd9bbb71ffc Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Tue, 30 Nov 2010 19:52:42 +0100 Subject: [PATCH] Fixed #2252 (segmentation fault with enable=all) --- lib/symboldatabase.cpp | 14 +++++++++++++- test/testclass.cpp | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index a77b8b20e..5738861fb 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -710,8 +710,20 @@ const Token *SymbolDatabase::initBaseInfo(SpaceInfo *info, const Token *tok) // don't add unhandled templates if (tok2->next()->str() == "<") { - while (tok2->str() != ">") + int level1 = 1; + while (tok2->next()) + { + if (tok2->next()->str() == ">") + { + level1--; + if (level == 0) + break; + } + else if (tok2->next()->str() == "<") + level1++; + tok2 = tok2->next(); + } } // save pattern for base class name diff --git a/test/testclass.cpp b/test/testclass.cpp index 2ee75246a..4861919f5 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -173,6 +173,7 @@ private: TEST_CASE(symboldatabase5); // ticket #2178 TEST_CASE(symboldatabase6); // ticket #2221 TEST_CASE(symboldatabase7); // ticket #2230 + TEST_CASE(symboldatabase8); // ticket #2252 } // Check the operator Equal @@ -4956,6 +4957,21 @@ private: ASSERT_EQUALS("", errout.str()); } + + void symboldatabase8() + { + // ticket #2252 - segmentation fault + checkConst("struct PaletteColorSpaceHolder: public rtl::StaticWithInit,\n" + " PaletteColorSpaceHolder>\n" + "{\n" + " uno::Reference operator()()\n" + " {\n" + " return vcl::unotools::createStandardColorSpace();\n" + " }\n" + "};\n"); + + ASSERT_EQUALS("", errout.str()); + } }; REGISTER_TEST(TestClass)