From a7baf88d4f6cf1f74e499ee406e5c9dc35032875 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Sun, 24 Dec 2023 14:42:07 +0100 Subject: [PATCH] Fix #12289 FN (regression): memory leak not shown when strcpy is used (#5809) --- lib/checkleakautovar.cpp | 2 +- test/testleakautovar.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/checkleakautovar.cpp b/lib/checkleakautovar.cpp index 0602bb1f5..86f1ab816 100644 --- a/lib/checkleakautovar.cpp +++ b/lib/checkleakautovar.cpp @@ -841,7 +841,7 @@ const Token * CheckLeakAutoVar::checkTokenInsideExpression(const Token * const t if (rhs->varId() == tok->varId()) { // simple assignment varInfo.erase(tok->varId()); - } else if (rhs->str() == "(" && !mSettings->library.returnValue(rhs->astOperand1()).empty()) { + } else if (rhs->astParent() && rhs->str() == "(" && !mSettings->library.returnValue(rhs->astOperand1()).empty()) { // #9298, assignment through return value of a function const std::string &returnValue = mSettings->library.returnValue(rhs->astOperand1()); if (startsWith(returnValue, "arg")) { diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index d5cd3874d..ad2212ff2 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -2999,6 +2999,7 @@ private: TEST_CASE(returnedValue); // #9298 TEST_CASE(deallocuse2); TEST_CASE(fclose_false_positive); // #9575 + TEST_CASE(strcpy_false_negative); } void returnedValue() { // #9298 @@ -3037,6 +3038,13 @@ private: ASSERT_EQUALS("", errout.str()); } + void strcpy_false_negative() { // #12289 + check("void f() {\n" + " char* buf = new char[12];\n" + " strcpy(buf, \"123\");\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:4]: (error) Memory leak: buf\n", errout.str()); + } }; REGISTER_TEST(TestLeakAutoVarStrcpy)