From 03e7914c9856ed2b41e9d6a82d60956571f95959 Mon Sep 17 00:00:00 2001 From: Martin Ettl Date: Sat, 28 Nov 2009 13:41:24 +0100 Subject: [PATCH] partial fix of ticket #997; added check for write() two testcases --- lib/checkbufferoverrun.cpp | 2 +- test/testbufferoverrun.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 67f4d9088..2911d2810 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -465,7 +465,7 @@ void CheckBufferOverrun::checkScope(const Token *tok, const char *varname[], con // Writing data into array.. if (varid > 0 && - Token::Match(tok, "read ( %any% , %varid% , %num% )", varid) && + Token::Match(tok, "read|write ( %any% , %varid% , %num% )", varid) && MathLib::isInt(tok->strAt(6))) { size_t len = MathLib::toLongNumber(tok->strAt(6)); diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index c21634d29..a8750311d 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -817,6 +817,20 @@ private: "}\n"); ASSERT_EQUALS("[test.cpp:4]: (error) Buffer access out-of-bounds\n", errout.str()); + check("void f(int fd)\n" + "{\n" + " char str[3];\n" + " write(fd, str, 3);\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + + check("void f(int fd)\n" + "{\n" + " char str[3];\n" + " write(fd, str, 4);\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:4]: (error) Buffer access out-of-bounds\n", errout.str()); + check("void f()\n" "{\n" " char str[3];\n" @@ -830,6 +844,7 @@ private: " fgets(str, 4, stdin);\n" "}\n"); ASSERT_EQUALS("[test.cpp:4]: (error) Buffer access out-of-bounds\n", errout.str()); + }