From b143b283e9c04a77fd75a076eb16761c40ec92c0 Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Sun, 3 Jul 2011 10:50:15 -0400 Subject: [PATCH] fix #2886 (crash of cppcheck ( typedef struct x { } )) --- lib/tokenize.cpp | 2 +- test/testsimplifytokens.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index e8a6e1c70..a8cf03f48 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -898,7 +898,7 @@ static Token *splitDefinitionFromTypedef(Token *tok) tok1->insertToken(";"); tok1 = tok1->next(); - if (tok1->next()->str() == ";" && tok1 && tok1->previous()->str() == "}") + if (tok1->next() && tok1->next()->str() == ";" && tok1 && tok1->previous()->str() == "}") { tok->deleteThis(); tok1->deleteThis(); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 44b1719a0..28fa0d69a 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -260,6 +260,7 @@ private: TEST_CASE(simplifyTypedef93); // ticket #2738 TEST_CASE(simplifyTypedef94); // ticket #1982 TEST_CASE(simplifyTypedef95); // ticket #2844 + TEST_CASE(simplifyTypedef96); // ticket #2886 TEST_CASE(simplifyTypedefFunction1); TEST_CASE(simplifyTypedefFunction2); // ticket #1685 @@ -5374,6 +5375,13 @@ private: ASSERT_EQUALS("", errout.str()); } + void simplifyTypedef96() // ticket #2886 (segmentation fault) + { + const char code[] = "typedef struct x { }\n"; + sizeof_(code); + ASSERT_EQUALS("[test.cpp:1]: (error) syntax error\n", errout.str()); + } + void simplifyTypedefFunction1() { {