From b6c995ea478c31f116597a42fff0ef9058a9fc28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 13 Oct 2010 20:57:59 +0200 Subject: [PATCH] Fixed #2096 (False positive: buffer overrun (extern array)) --- lib/checkbufferoverrun.cpp | 4 +++- test/testbufferoverrun.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index fa2ef130e..ecf36dfa9 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1794,7 +1794,9 @@ bool CheckBufferOverrun::ArrayInfo::declare(const Token *tok, const Tokenizer &t if (!tok->isName()) return false; - while (tok && (tok->str() == "static" || tok->str() == "const")) + while (tok && (tok->str() == "static" || + tok->str() == "const" || + tok->str() == "extern")) tok = tok->next(); int ivar = 0; diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index d4cbedba1..7982d8bad 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -1700,6 +1700,13 @@ private: " strcpy(x, \"12\");\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + check("extern char a[10];\n" + "void f() {\n" + " char b[25] = {0};\n" + " std::memcpy(b, a, sizeof(a));\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void sprintf1()