Fixed #5574 (False positive: mismatchAllocDealloc using realloc() and free)
This commit is contained in:
parent
521734faa2
commit
06618b31bb
|
@ -181,8 +181,11 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getAllocationType(const Token *tok2,
|
||||||
|
|
||||||
// Does tok2 point on "g_malloc", "g_strdup", ..
|
// Does tok2 point on "g_malloc", "g_strdup", ..
|
||||||
const int alloctype = settings1->library.alloc(tok2->str());
|
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;
|
return Library::ismemory(alloctype) ? OtherMem : OtherRes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (Token::Match(tok2,"%type%|%var% ::|. %type%"))
|
while (Token::Match(tok2,"%type%|%var% ::|. %type%"))
|
||||||
|
|
|
@ -273,6 +273,7 @@ private:
|
||||||
TEST_CASE(realloc13);
|
TEST_CASE(realloc13);
|
||||||
TEST_CASE(realloc14);
|
TEST_CASE(realloc14);
|
||||||
TEST_CASE(realloc15);
|
TEST_CASE(realloc15);
|
||||||
|
TEST_CASE(realloc16);
|
||||||
|
|
||||||
TEST_CASE(assign1);
|
TEST_CASE(assign1);
|
||||||
TEST_CASE(assign2); // #2806 - FP when using redundant assignment
|
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());
|
"[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() {
|
void assign1() {
|
||||||
check("void foo()\n"
|
check("void foo()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
|
|
Loading…
Reference in New Issue