From 0444ff52988d2109f09c5d2fef7e801626266c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 26 Apr 2010 18:52:40 +0200 Subject: [PATCH] Fixed #1627 (###### If you see this, there is a bug ###### - Token::Match('%varid% [ %num% ]', 0)) --- lib/checkbufferoverrun.cpp | 2 ++ test/testbufferoverrun.cpp | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) mode change 100755 => 100644 test/testbufferoverrun.cpp diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 1667b3818..5de82a88c 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1670,6 +1670,8 @@ bool CheckBufferOverrun::ArrayInfo::declare(const Token *tok, const Tokenizer &t _varname = vartok->str(); _varid = vartok->varId(); + if (!varid) + return false; const Token *atok = vartok->tokAt(2); diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp old mode 100755 new mode 100644 index a3c1821cf..27eb71267 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -72,6 +72,8 @@ private: TEST_CASE(sizeof2); TEST_CASE(sizeof3); + TEST_CASE(arrayInfo); + TEST_CASE(array_index_1); TEST_CASE(array_index_2); TEST_CASE(array_index_3); @@ -271,6 +273,25 @@ private: ASSERT_EQUALS("", errout.str()); } + + + void arrayInfo() + { + // Tokenize.. + Tokenizer tokenizer; + std::istringstream istr("XY(1) const int a[2] = { 1, 2 };"); + tokenizer.tokenize(istr, "test.cpp"); + + // Clear the error buffer.. + errout.str(""); + + tokenizer.simplifySizeof(); + + CheckBufferOverrun::ArrayInfo ai; + ASSERT_EQUALS(false, ai.declare(tokenizer.tokens()->tokAt(5), tokenizer)); + } + + void array_index_1() { check("void f()\n"