From 13ca5f89be729418f7249063d06d5f53c86b5b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 23 Jun 2009 18:29:43 +0200 Subject: [PATCH 1/3] added test case --- test/testmemleak.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index a0a04c95e..4bcea150b 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -255,6 +255,7 @@ private: TEST_CASE(unknownFunction2); TEST_CASE(unknownFunction3); TEST_CASE(unknownFunction4); + TEST_CASE(unknownFunction5); // VCL.. TEST_CASE(vcl1); @@ -1969,6 +1970,23 @@ private: ASSERT_EQUALS("[test.cpp:5]: (error) Memory leak: p\n", errout.str()); } + void unknownFunction5() + { + check("static void foo()\n" + "{\n" + " char *p = NULL;\n" + "\n" + " if( a )\n" + " p = malloc(100);\n" + "\n" + " if( a )\n" + " {\n" + " FREENULL(p);\n" + " FREENULL();\n" + " }\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } void checkvcl(const char code[], const char _autoDealloc[]) From 7f8b40d13541d1f8f56fd5e3000d6cec5915569d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 23 Jun 2009 20:37:34 +0200 Subject: [PATCH 2/3] calling unknown function -> use --- src/checkmemoryleak.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/checkmemoryleak.cpp b/src/checkmemoryleak.cpp index ba431014b..39e407f48 100644 --- a/src/checkmemoryleak.cpp +++ b/src/checkmemoryleak.cpp @@ -486,6 +486,8 @@ const char * CheckMemoryLeakInFunction::call_func(const Token *tok, std::listGetFunctionTokenByName(funcname.c_str()); + if (!ftok) + return "use"; // how many parameters does the function want? if (numpar != countParameters(ftok)) From 61f4a2975845ee609b974003edf461b7736f0c4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 23 Jun 2009 20:40:27 +0200 Subject: [PATCH 3/3] minor fix of test case --- src/checkmemoryleak.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/checkmemoryleak.cpp b/src/checkmemoryleak.cpp index 39e407f48..7e77cfdf6 100644 --- a/src/checkmemoryleak.cpp +++ b/src/checkmemoryleak.cpp @@ -1163,7 +1163,7 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok, bool &all) } // Remove "if { dealloc ; callfunc ; } !!else" - else if (Token::Match(tok2->next(), "if { dealloc|assign|use ; callfunc ; } !!else")) + else if (Token::Match(tok2->next(), "if { dealloc|assign ; callfunc ; } !!else")) { Token::eraseTokens(tok2, tok2->tokAt(8)); done = false;