From 2ca7dbc004404bac728f3f2ca45cd1d9cf7aeb7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 19 Oct 2010 18:23:44 +0200 Subject: [PATCH] Fixed #2109 (false positive: buffer overrun) --- lib/checkbufferoverrun.cpp | 3 +++ test/testbufferoverrun.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index e64617ec2..c4400beb7 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1474,6 +1474,9 @@ unsigned int CheckBufferOverrun::countSprintfLength(const std::string &input_str void CheckBufferOverrun::checkSprintfCall(const Token *tok, const unsigned int size) { + if (size == 0) + return; + const Token *end = tok->next()->link(); // Count the number of tokens in the buffer variable's name diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 57835a4f7..bb1231c74 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -136,6 +136,7 @@ private: TEST_CASE(sprintf6); TEST_CASE(sprintf7); TEST_CASE(sprintf8); + TEST_CASE(sprintf9); TEST_CASE(snprintf1); TEST_CASE(snprintf2); @@ -1824,6 +1825,16 @@ private: ASSERT_EQUALS("", errout.str()); } + void sprintf9() + { + check("void f()\n" + "{\n" + " gchar str[3];\n" + " sprintf(str, \"1\");\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } + void snprintf1() { check("void f()\n"