From 0dccd3a6326722f0571fda6793579f872dac63f6 Mon Sep 17 00:00:00 2001 From: Martin Ettl Date: Wed, 1 Jan 2014 19:04:02 +0100 Subject: [PATCH] Tokenizer:simplifyFlowControl(): Fixed crash on garbage code. --- lib/tokenize.cpp | 2 +- test/testtokenize.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 59f61935e..d93d9eea5 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3994,7 +3994,7 @@ void Tokenizer::simplifyFlowControl() unsigned int indentlevel = 0; bool stilldead = false; - for (Token *tok = begin; tok != end; tok = tok->next()) { + for (Token *tok = begin; tok && tok != end; tok = tok->next()) { if (tok->str() == "(" || tok->str() == "[") { tok = tok->link(); continue; diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 0decaa876..840a2dca4 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -76,6 +76,7 @@ private: TEST_CASE(garbageCode4); // #4887 TEST_CASE(garbageCode5); // #5168 TEST_CASE(garbageCode6); // #5214 + TEST_CASE(garbageCode7); TEST_CASE(simplifyFileAndLineMacro); // tokenize "return - __LINE__;" @@ -994,6 +995,10 @@ private: tokenizeAndStringify("int a = int b = ( 0 ? ? ) 1 : 0 ;", /*simplify=*/true); } + void garbageCode7() { + tokenizeAndStringify(" 1 (int j) { return return (c) * sizeof } y[1];", /*simplify=*/true); + } + void simplifyFileAndLineMacro() { // tokenize 'return - __LINE__' correctly ASSERT_EQUALS("\"test.cpp\"", tokenizeAndStringify("__FILE__")); ASSERT_EQUALS("return -1 ;", tokenizeAndStringify("return - __LINE__;"));