From a6ca3cf2cf39ef79576f2321e89e50e9d3aa6366 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Thu, 27 Mar 2014 19:06:13 +0100 Subject: [PATCH] Throw syntaxError when encounter one in symboldatabase (fixes #5572) --- lib/symboldatabase.cpp | 6 ++---- test/testsymboldatabase.cpp | 15 ++++++--------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index eef7bc00a..310f5f727 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -147,8 +147,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti // make sure we have valid code if (!tok2) { - scopeList.pop_back(); - break; + _tokenizer->syntaxError(tok); } } @@ -157,8 +156,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti // make sure we have valid code if (!new_scope->classEnd) { - scopeList.pop_back(); - break; + _tokenizer->syntaxError(tok); } // make the new scope the current scope diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 2a9e7a6ba..2edfbc580 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -1402,16 +1402,12 @@ private: void symboldatabase14() { // ticket #2589 - segmentation fault - check("struct B : A\n"); - - ASSERT_EQUALS("", errout.str()); + ASSERT_THROW(check("struct B : A\n"), InternalError); } void symboldatabase15() { // ticket #2591 - segmentation fault - check("struct A :\n"); - - ASSERT_EQUALS("", errout.str()); + ASSERT_THROW(check("struct A :\n"), InternalError); } void symboldatabase16() { @@ -1444,9 +1440,7 @@ private: void symboldatabase20() { // ticket #3013 - segmentation fault - check("struct x : virtual y\n"); - - ASSERT_EQUALS("", errout.str()); + ASSERT_THROW(check("struct x : virtual y\n"), InternalError); } void symboldatabase21() { @@ -1851,6 +1845,9 @@ private: GET_SYMBOL_DB("{ }; void namespace A::f; { g() { int } }"); (void)db; } + { + ASSERT_THROW(GET_SYMBOL_DB("class Foo {}; class Bar : public Foo"), InternalError); + } } void findFunction1() {