From 9275b49688590fa1208e3a720dfe19a1fc35d30b Mon Sep 17 00:00:00 2001 From: Reijo Tomperi Date: Sun, 15 Nov 2009 17:44:30 +0200 Subject: [PATCH] Fix #964 (Integer division by zero exception) http://sourceforge.net/apps/trac/cppcheck/ticket/964 --- lib/checkbufferoverrun.cpp | 4 +++- test/testbufferoverrun.cpp | 10 ++++++++++ test/testother.cpp | 10 +++++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index e58e0021c..998de7302 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -678,7 +678,9 @@ void CheckBufferOverrun::checkGlobalAndLocalVariable() // malloc() gets count of bytes and not count of // elements, so we should calculate count of elements // manually - size /= _tokenizer->sizeOfType(declTok); + unsigned int sizeOfType = _tokenizer->sizeOfType(declTok); + if (sizeOfType > 0) + size /= _tokenizer->sizeOfType(declTok); } } else diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index d75042d4b..a638b4a82 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -134,6 +134,7 @@ private: TEST_CASE(memset1); TEST_CASE(counter_test); TEST_CASE(strncpy1); + TEST_CASE(unknownType); } @@ -1335,6 +1336,15 @@ private: "}\n"); ASSERT_EQUALS("[test.cpp:4]: (error) Buffer access out-of-bounds\n", errout.str()); } + + void unknownType() + { + check("void f()\n" + "{\n" + " UnknownType *a = malloc(4);\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } }; REGISTER_TEST(TestBufferOverrun) diff --git a/test/testother.cpp b/test/testother.cpp index 803e1352c..6ab884356 100644 --- a/test/testother.cpp +++ b/test/testother.cpp @@ -1143,11 +1143,11 @@ private: ASSERT_EQUALS("", errout.str()); checkUninitVar("int f(int (*assign)(char *p))\n" - "{\n" - " int i;\n" - " (*assign)(&i);\n" - " return i;\n" - "}\n"); + "{\n" + " int i;\n" + " (*assign)(&i);\n" + " return i;\n" + "}\n"); ASSERT_EQUALS("", errout.str()); // arrays..