From 9817da00ec2a69aa24d9a64f220d18444224bf3a Mon Sep 17 00:00:00 2001 From: Simon Martin Date: Sat, 23 Nov 2013 20:33:03 +0100 Subject: [PATCH] Ticket #5168: Don't crash when simplifying bit-fields for invalid 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 8864ea40e..4f93d6dc4 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -9580,7 +9580,7 @@ void Tokenizer::simplifyBitfields() tok->next()->str() != "default") { const bool offset = (tok->next()->str() == "const"); - if (!Token::Match(tok->tokAt(3 + (offset ? 1 : 0)), "[{};]")) { + if (!Token::Match(tok->tokAt(3 + (offset ? 1 : 0)), "[{};()]")) { tok->deleteNext(4 + (offset ? 1 : 0)); goback = true; } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 028fc4289..0cddf01fb 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -74,6 +74,7 @@ private: TEST_CASE(garbageCode2); // #4300 TEST_CASE(garbageCode3); // #4869 TEST_CASE(garbageCode4); // #4887 + TEST_CASE(garbageCode5); // #5168 TEST_CASE(simplifyFileAndLineMacro); // tokenize "return - __LINE__;" @@ -976,6 +977,10 @@ private: tokenizeAndStringify("void f ( ) { = a ; if ( 1 ) if = ( 0 ) ; }"); } + void garbageCode5() { // #5168 + tokenizeAndStringify("( asm : ; void : );"); + } + void simplifyFileAndLineMacro() { // tokenize 'return - __LINE__' correctly ASSERT_EQUALS("\"test.cpp\"", tokenizeAndStringify("__FILE__")); ASSERT_EQUALS("return -1 ;", tokenizeAndStringify("return - __LINE__;"));