Skip to content

Commit

Permalink
LeakAutoVar: Handle C++ casts in function calls (#5181)
Browse files Browse the repository at this point in the history
  • Loading branch information
chrchr-github committed Jun 22, 2023
1 parent 353f540 commit fe56b0c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/checkleakautovar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,8 @@ void CheckLeakAutoVar::functionCall(const Token *tokName, const Token *tokOpenin
}

// Skip casts
if (arg->isKeyword() && arg->astParent() && arg->astParent()->isCast())
arg = arg->astParent();
while (arg && arg->isCast())
arg = arg->astOperand2() ? arg->astOperand2() : arg->astOperand1();
const Token * const argTypeStartTok = arg;
Expand Down
21 changes: 21 additions & 0 deletions test/testleakautovar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,13 @@ class TestLeakAutoVar : public TestFixture {
" g();\n"
"}\n", /*cpp*/ true);
ASSERT_EQUALS("", errout.str());

check("void g() {}\n" // #10517
"void f() {\n"
" char* p = malloc(10);\n"
" g();\n"
"}\n");
ASSERT_EQUALS("[test.c:5]: (error) Memory leak: p\n", errout.str());
}

void isAutoDealloc() {
Expand Down Expand Up @@ -2751,6 +2758,20 @@ class TestLeakAutoVar : public TestFixture {
" free_func((void *)(1), buf);\n"
"}", settingsFunctionCall);
ASSERT_EQUALS("[test.cpp:5]: (information) --check-library: Function free_func() should have <use>/<leak-ignore> configuration\n", errout.str());

check("void g(void*);\n"
"void h(int, void*);\n"
"void f1() {\n"
" int* p = new int;\n"
" g(static_cast<void*>(p));\n"
"}\n"
"void f2() {\n"
" int* p = new int;\n"
" h(1, static_cast<void*>(p));\n"
"}\n", /*cpp*/ true);
ASSERT_EQUALS("[test.cpp:6]: (information) --check-library: Function g() should have <use>/<leak-ignore> configuration\n"
"[test.cpp:10]: (information) --check-library: Function h() should have <use>/<leak-ignore> configuration\n",
errout.str());
}

void functionCallLeakIgnoreConfig() { // #7923
Expand Down

0 comments on commit fe56b0c

Please sign in to comment.