CheckLeakAutoVar: Fixed FP seen in daca@home

This commit is contained in:
Daniel Marjamäki 2019-06-02 15:25:45 +02:00
parent a44ea9f2ed
commit 7a3302b3e3
2 changed files with 14 additions and 0 deletions

View File

@ -374,6 +374,9 @@ void CheckLeakAutoVar::checkScope(const Token * const startToken,
VarInfo::AllocInfo& varAlloc = alloctype[innerTok->varId()]; VarInfo::AllocInfo& varAlloc = alloctype[innerTok->varId()];
varAlloc.type = f->groupId; varAlloc.type = f->groupId;
varAlloc.status = VarInfo::ALLOC; varAlloc.status = VarInfo::ALLOC;
} else {
// Fixme: warn about leak
alloctype.erase(innerTok->varId());
} }
} else if (mTokenizer->isCPP() && Token::Match(innerTok->tokAt(2), "new !!(")) { } else if (mTokenizer->isCPP() && Token::Match(innerTok->tokAt(2), "new !!(")) {
const Token* tok2 = innerTok->tokAt(2)->astOperand1(); const Token* tok2 = innerTok->tokAt(2)->astOperand1();

View File

@ -58,6 +58,8 @@ private:
TEST_CASE(assign12); // #4236: FP. bar(&x); TEST_CASE(assign12); // #4236: FP. bar(&x);
// TODO TEST_CASE(assign13); // #4237: FP. char*&ref=p; p=malloc(10); free(ref); // TODO TEST_CASE(assign13); // #4237: FP. char*&ref=p; p=malloc(10); free(ref);
TEST_CASE(assign14); TEST_CASE(assign14);
TEST_CASE(assign15);
TEST_CASE(assign16);
TEST_CASE(deallocuse1); TEST_CASE(deallocuse1);
TEST_CASE(deallocuse2); TEST_CASE(deallocuse2);
@ -311,6 +313,15 @@ private:
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
} }
void assign16() {
check("void f() {\n"
" char *p = malloc(10);\n"
" free(p);\n"
" if (p=dostuff()) *p = 0;\n"
"}");
ASSERT_EQUALS("", errout.str());
}
void deallocuse1() { void deallocuse1() {
check("void f(char *p) {\n" check("void f(char *p) {\n"
" free(p);\n" " free(p);\n"