From 96e387a4867af7ed0c2efea194f6c95a864456a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 24 Jan 2018 18:06:11 +0100 Subject: [PATCH] Fixed #8351 (segmentation fault on objective C code) --- lib/tokenize.cpp | 6 ++++++ test/testtokenize.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index c2347a5c0..e3e6ca6eb 100755 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -8394,6 +8394,12 @@ const Token * Tokenizer::findGarbageCode() const } } + // Objective C/C++ + for (const Token *tok = tokens(); tok; tok = tok->next()) { + if (Token::Match(tok, "[;{}] [ %name% %name% ] ;")) + return tok->next(); + } + return nullptr; } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index fdb1b7aee..eec13033d 100755 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -76,6 +76,8 @@ private: TEST_CASE(validate); + TEST_CASE(objectiveC); // Syntax error should be written for objective C/C++ code. + TEST_CASE(syntax_case_default); TEST_CASE(foreach); // #3690 @@ -848,6 +850,10 @@ private: ASSERT_THROW(tokenizeAndStringify("void foo(int i) { reinterpret_cast(i) };",false,false,Settings::Native,"test.h"), InternalError); } + void objectiveC() { + ASSERT_THROW(tokenizeAndStringify("void f() { [foo bar]; }"), InternalError); + } + void syntax_case_default() { // correct syntax tokenizeAndStringify("void f() {switch (n) { case 0: z(); break;}}"); ASSERT_EQUALS("", errout.str());