From fb2bd978adba779bfe8ef9c4fc41559d81b052b2 Mon Sep 17 00:00:00 2001 From: Alexander Mai Date: Mon, 1 Jun 2015 13:46:13 +0200 Subject: [PATCH] #6732 segmentation fault (invalid code) in Tokenizer::simplifyEmptyNamespaces. Add testcase, segfault seems to have been fixed by previous commit. Run astyle --- lib/tokenize.cpp | 8 ++++---- test/testgarbage.cpp | 8 +++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index fe214960d..ddd3fd1e7 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -4503,10 +4503,10 @@ Token *Tokenizer::simplifyAddBracesPair(Token *tok, bool commandWithCondition) tokAfterCondition->previous()->insertToken("{"); Token * tokOpenBrace = tokAfterCondition->previous(); Token * tokEnd = tokAfterCondition->linkAt(1)->linkAt(2)->linkAt(1); - if (!tokEnd) { - syntaxError(tokAfterCondition); - return nullptr; - } + if (!tokEnd) { + syntaxError(tokAfterCondition); + return nullptr; + } tokEnd->insertToken("}"); Token * tokCloseBrace = tokEnd->next(); diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index faea6c2b7..2f7b8b354 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -95,7 +95,8 @@ private: TEST_CASE(garbageCode54); // #6722 TEST_CASE(garbageCode55); // #6724 TEST_CASE(garbageCode56); // #6713 - TEST_CASE(garbageCode57); // #6733 + TEST_CASE(garbageCode57); // #6733 + TEST_CASE(garbageCode58); // #6732 TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); @@ -545,6 +546,11 @@ private: ASSERT_THROW(checkCode("{ } if () try { } catch (...) B::~B { }"), InternalError); } + void garbageCode58() { // #6732 + ASSERT_THROW(checkCode("{ }> {= ~A()^{} }P { }"), InternalError); + } + + void garbageValueFlow() { // #6089 const char* code = "{} int foo(struct, x1, struct x2, x3, int, x5, x6, x7)\n"