From ed1d63ffc0758af3da1a7f7617e919f45dc12c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 3 May 2014 18:12:06 +0200 Subject: [PATCH] Fixed #5636 (FP: matrix out of bounds) --- lib/checkbufferoverrun.cpp | 2 +- test/testbufferoverrun.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index cd9c71df4..d126c4951 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1170,7 +1170,7 @@ void CheckBufferOverrun::valueFlowCheckArrayIndex(const Token * const tok, const bool addressOf = false; { const Token *tok2 = tok->astParent(); - while (Token::Match(tok2, "%var%|.|::")) + while (Token::Match(tok2, "%var%|.|::|[")) tok2 = tok2->astParent(); addressOf = Token::Match(tok2, "&") && !(tok2->astOperand1() && tok2->astOperand2()); } diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index c0e1ceb08..061eaad96 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -1633,6 +1633,12 @@ private: "}"); ASSERT_EQUALS("[test.cpp:3]: (error) Array 'a[6][6][6]' index a[6][6][2] out of bounds.\n", errout.str()); + check("void f() {\n" + " int a[2][2];\n" + " p = &a[2][0];\n" + "}"); + ASSERT_EQUALS("", errout.str()); + // unknown dim.. check("void f()\n" "{\n"