diff --git a/lib/checkleakautovar.cpp b/lib/checkleakautovar.cpp index 991fb1b1891..63a07352fb5 100644 --- a/lib/checkleakautovar.cpp +++ b/lib/checkleakautovar.cpp @@ -969,6 +969,7 @@ void CheckLeakAutoVar::functionCall(const Token *tokName, const Token *tokOpenin const Library::AllocFunc* deallocFunc = mSettings->library.getDeallocFuncInfo(tokName); VarInfo::AllocInfo dealloc(deallocFunc ? deallocFunc->groupId : 0, VarInfo::DEALLOC, tokName); if (const Library::AllocFunc* allocFunc = mSettings->library.getAllocFuncInfo(tokName)) { + leakIfAllocated(arg, varInfo); if (allocFunc->arg == argNr) { VarInfo::AllocInfo& varAlloc = varInfo.alloctype[arg->varId()]; varAlloc.type = allocFunc->groupId; diff --git a/test/cfg/gnu.c b/test/cfg/gnu.c index 894f65ba0fc..7b7b2cfec88 100644 --- a/test/cfg/gnu.c +++ b/test/cfg/gnu.c @@ -364,6 +364,13 @@ void memleak_asprintf2() { // #12186 // cppcheck-suppress memleak } +void memleak_asprintf3() { + char* p = malloc(5); + // cppcheck-suppress memleak + asprintf(&p, "%s", "test"); + free(p); +} + void memleak_xmalloc() { char *p = (char*)xmalloc(10);