From 817f66d74dc303ea4c02ba3cb22a7f77f351c612 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Sun, 7 Jan 2018 12:52:28 +0100 Subject: [PATCH] Fixed crash on garbage code (#8317) --- lib/checkautovariables.cpp | 2 ++ test/testgarbage.cpp | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/lib/checkautovariables.cpp b/lib/checkautovariables.cpp index 634e5a7f2..d108bf679 100644 --- a/lib/checkautovariables.cpp +++ b/lib/checkautovariables.cpp @@ -459,6 +459,8 @@ void CheckAutoVariables::returnReference() for (const Token *tok2 = scope->classStart->next(); tok2 && tok2 != scope->classEnd; tok2 = tok2->next()) { if (!tok2->scope()->isExecutable()) { tok2 = tok2->scope()->classEnd; + if (!tok2) + break; continue; } diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index 089cd110e..7ff23bab4 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -219,6 +219,7 @@ private: TEST_CASE(garbageCode186); // #8151 TEST_CASE(garbageCode187); TEST_CASE(garbageCode188); + TEST_CASE(garbageCode189); // #8317 TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); TEST_CASE(garbageAST); @@ -1437,6 +1438,10 @@ private: ASSERT_THROW(checkCode("{z r(){(){for(;<(x);){if(0==0)}}}}"), InternalError); } + void garbageCode189() { // #8317 + checkCode("t&n(){()()[](){()}}$"); + } + void syntaxErrorFirstToken() { ASSERT_THROW(checkCode("&operator(){[]};"), InternalError); // #7818 ASSERT_THROW(checkCode("*(*const<> (size_t); foo) { } *(*const (size_t)() ; foo) { }"), InternalError); // #6858