From bea387538631337021d219ce70dc843858460898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 9 Mar 2011 21:00:28 +0100 Subject: [PATCH] Fixed #2607 (segmentation fault of cppcheck ( struct C {} {} x)) --- lib/checkbufferoverrun.cpp | 3 +++ test/testbufferoverrun.cpp | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 83d9bb068..c6f440c79 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1975,6 +1975,9 @@ bool CheckBufferOverrun::ArrayInfo::declare(const Token *tok, const Tokenizer &t _element_size = 0; _varname.clear(); + if (!tok) + return false; + if (!tok->isName() || tok->str() == "return") return false; diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 59daa3376..053139bea 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -198,7 +198,8 @@ private: TEST_CASE(terminateStrncpy3); TEST_CASE(recursive_long_time); - TEST_CASE(crash); // Ticket #1587 - crash + TEST_CASE(crash1); // Ticket #1587 - crash + TEST_CASE(crash2); // Ticket #2607 - crash TEST_CASE(executionPaths1); TEST_CASE(executionPaths2); @@ -2709,7 +2710,7 @@ private: // Ticket #1587 - crash - void crash() + void crash1() { check("struct struct A\n" "{\n" @@ -2724,6 +2725,10 @@ private: ASSERT_EQUALS("", errout.str()); } + void crash2() + { + check("struct C {} {} x"); + } void epcheck(const char code[])