From 36a65993867c58c6a0a1d0b468744c2c326654e6 Mon Sep 17 00:00:00 2001 From: amai2012 Date: Sat, 26 Dec 2015 20:16:01 +0100 Subject: [PATCH] #7324 segmentation fault (invalid code) in Tokenizer::simplifyTokenList1 --- lib/tokenize.cpp | 2 +- test/testgarbage.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index ef9090500..0908fa7d9 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3025,7 +3025,7 @@ void Tokenizer::setVarId() vartok->varId(varpos->second); if (vartok->strAt(1) == "<") { tok3 = vartok->next()->findClosingBracket(); - if (tok3 && tok3->next()->link()) + if (tok3 && tok3->next() && tok3->next()->link()) tok3 = tok3->next()->link(); } else tok3 = vartok->linkAt(1); diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index becb12764..da450e4c6 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -212,6 +212,7 @@ private: TEST_CASE(garbageCode161); // #7200 TEST_CASE(garbageCode162); // #7208 TEST_CASE(garbageCode163); // #7228 + TEST_CASE(garbageCode164); // #7234 TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); TEST_CASE(garbageAST); @@ -1399,6 +1400,11 @@ private: ASSERT_THROW(checkCode("typedef s f[](){typedef d h(;f)}", false), InternalError); } + void garbageCode164() { + //7234 + ASSERT_THROW(checkCode("class d{k p;}(){d::d():B<()}", false), InternalError); + } + }; REGISTER_TEST(TestGarbage)