Fixed #5574 (False positive: mismatchAllocDealloc using realloc() and free)

This commit is contained in:
Daniel Marjamäki 2014-03-17 16:10:54 +01:00
parent 521734faa2
commit 06618b31bb
2 changed files with 15 additions and 1 deletions

View File

@ -181,8 +181,11 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getAllocationType(const Token *tok2,
// Does tok2 point on "g_malloc", "g_strdup", ..
const int alloctype = settings1->library.alloc(tok2->str());
if (alloctype > 0)
if (alloctype > 0) {
if (alloctype == settings1->library.dealloc("free"))
return Malloc;
return Library::ismemory(alloctype) ? OtherMem : OtherRes;
}
}
while (Token::Match(tok2,"%type%|%var% ::|. %type%"))

View File

@ -273,6 +273,7 @@ private:
TEST_CASE(realloc13);
TEST_CASE(realloc14);
TEST_CASE(realloc15);
TEST_CASE(realloc16);
TEST_CASE(assign1);
TEST_CASE(assign2); // #2806 - FP when using redundant assignment
@ -3065,6 +3066,16 @@ private:
"[test.cpp:6]: (error) Memory leak: m_options\n", errout.str());
}
void realloc16() {
check("void f(char *zLine) {\n"
" zLine = realloc(zLine, 42);\n"
" if (zLine) {\n"
" free(zLine);\n"
" }\n"
"}\n");
ASSERT_EQUALS("", errout.str());
}
void assign1() {
check("void foo()\n"
"{\n"