From 5bda42bc8eec1802b36f03e2db72d4df62aec355 Mon Sep 17 00:00:00 2001 From: chrchr Date: Mon, 8 Nov 2021 11:04:56 +0100 Subject: [PATCH 1/7] Fix release-windows workflow --- .github/workflows/release-windows.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-windows.yml b/.github/workflows/release-windows.yml index 41d775e9d0c..f63271f595b 100644 --- a/.github/workflows/release-windows.yml +++ b/.github/workflows/release-windows.yml @@ -30,9 +30,9 @@ jobs: - name: Install PCRE run: | - curl -fsSL https://ftp.pcre.org/pub/pcre/pcre-8.44.zip -o pcre-8.44.zip - 7z x pcre-8.44.zip - cd pcre-8.44 + curl -fsSL https://github.com/pfultz2/pcre/archive/refs/tags/8.45.zip -o pcre-8.45.zip + 7z x pcre-8.45.zip + cd pcre-8.45 cmake . -G "Visual Studio 16 2019" -A x64 msbuild -m PCRE.sln /p:Configuration=Release /p:Platform=x64 dir From d261eeec888f7e3a77cf1284185a0be1b9451909 Mon Sep 17 00:00:00 2001 From: chrchr Date: Mon, 8 Nov 2021 12:09:27 +0100 Subject: [PATCH 2/7] Fix member shadowing --- lib/settings.cpp | 4 ++-- lib/settings.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/settings.cpp b/lib/settings.cpp index 359fd3c77a5..46a50a9d72c 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -76,9 +76,9 @@ Settings::Settings() certainty.setEnabled(Certainty::normal, true); } -void Settings::loadCppcheckCfg(const std::string &exename) +void Settings::loadCppcheckCfg(const std::string &executable) { - std::string fileName = Path::getPathFromFilename(exename) + "cppcheck.cfg"; + std::string fileName = Path::getPathFromFilename(executable) + "cppcheck.cfg"; #ifdef FILESDIR if (Path::fileExists(FILESDIR "/cppcheck.cfg")) fileName = FILESDIR "/cppcheck.cfg"; diff --git a/lib/settings.h b/lib/settings.h index f36922b0860..b245557cd4d 100644 --- a/lib/settings.h +++ b/lib/settings.h @@ -95,7 +95,7 @@ class CPPCHECKLIB Settings : public cppcheck::Platform { public: Settings(); - void loadCppcheckCfg(const std::string &exename); + void loadCppcheckCfg(const std::string &executable); /** @brief addons, either filename of python/json file or json data */ std::list addons; From 6b552d23a053c876919ca764aa7297dcc3d3b454 Mon Sep 17 00:00:00 2001 From: chrchr Date: Thu, 11 Nov 2021 17:26:05 +0100 Subject: [PATCH 3/7] Add test case for #10137 --- test/testbufferoverrun.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 3113d99a5a5..8e43412adb3 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -4721,6 +4721,19 @@ class TestBufferOverrun : public TestFixture { " return foo(1, &single_value);\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + check("void f(const char* app, size_t applen) {\n" // #10137 + " char* tmp_de = NULL;\n" + " char** str = &tmp_de;\n" + " char* tmp = (char*)realloc(*str, applen + 1);\n" + " if (tmp) {\n" + " *str = tmp;\n" + " memcpy(*str, app, applen);\n" + " (*str)[applen] = '\\0';\n" + " }\n" + " free(*str);\n" + "}\n", "test.c"); + ASSERT_EQUALS("", errout.str()); } }; From f101a0f49b1060a517cc56e2e78fccfad325c6d8 Mon Sep 17 00:00:00 2001 From: chrchr Date: Mon, 15 Nov 2021 13:44:35 +0100 Subject: [PATCH 4/7] Fix #10393 FP returnDanglingLifetime --- lib/symboldatabase.cpp | 5 +++++ test/testautovariables.cpp | 31 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 54e9a2cf366..b7049059c66 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -6510,6 +6510,11 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to setValueType(tok, valuetype); } + else if (Token::simpleMatch(tok->previous(), "= {") && tok->tokAt(-2) && tok->tokAt(-2)->valueType()) { + ValueType vt = *tok->tokAt(-2)->valueType(); + setValueType(tok, vt); + } + // library type/function else if (tok->previous()) { if (tok->astParent() && Token::Match(tok->astOperand1(), "%name%|::")) { diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index bf6b6d3118f..d23966e0955 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -2441,6 +2441,37 @@ class TestAutoVariables : public TestFixture { " return &*seq.begin();\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + check("std::string f(std::string Str, int first, int last) {\n" + " return { Str.begin() + first, Str.begin() + last + 1 };\n" + "}\n", + true); + ASSERT_EQUALS("", errout.str()); + + check("std::string f(std::string s) {\n" + " std::string r = { s.begin(), s.end() };\n" + " return r;\n" + "}\n", + true); + ASSERT_EQUALS("", errout.str()); + + check("struct A {\n" + " std::vector> mA;\n" + " void f(std::unique_ptr a) {\n" + " auto x = a.get();\n" + " mA.push_back(std::move(a));\n" + " }\n" + "};\n"); + ASSERT_EQUALS("", errout.str()); + + check("struct A {\n" + " std::map m;\n" + " int* f(std::string s) {\n" + " auto r = m.emplace(name, name);\n" + " return &(r.first->second);\n" + " }\n" + "};\n"); + ASSERT_EQUALS("", errout.str()); } void danglingLifetime() { From 72ffcfa102cba3c07f76ccc2fc39019ebe969602 Mon Sep 17 00:00:00 2001 From: chrchr Date: Mon, 15 Nov 2021 13:59:31 +0100 Subject: [PATCH 5/7] Update --- test/testautovariables.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index c409178fc35..3dc031a5b97 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -2474,6 +2474,12 @@ class TestAutoVariables : public TestFixture { true); ASSERT_EQUALS("", errout.str()); + check("std::string f(std::string Str, int first, int last) {\n" + " return { Str.begin() + first, Str.begin() + last + 1 };\n" + "}\n", + true); + ASSERT_EQUALS("", errout.str()); + check("struct A {\n" " std::vector> mA;\n" " void f(std::unique_ptr a) {\n" From b8d5a35c7c16fc073625211bb25b238caa727ecc Mon Sep 17 00:00:00 2001 From: chrchr Date: Mon, 15 Nov 2021 14:05:23 +0100 Subject: [PATCH 6/7] Undo unrelated --- lib/settings.cpp | 4 ++-- lib/settings.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/settings.cpp b/lib/settings.cpp index 46a50a9d72c..359fd3c77a5 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -76,9 +76,9 @@ Settings::Settings() certainty.setEnabled(Certainty::normal, true); } -void Settings::loadCppcheckCfg(const std::string &executable) +void Settings::loadCppcheckCfg(const std::string &exename) { - std::string fileName = Path::getPathFromFilename(executable) + "cppcheck.cfg"; + std::string fileName = Path::getPathFromFilename(exename) + "cppcheck.cfg"; #ifdef FILESDIR if (Path::fileExists(FILESDIR "/cppcheck.cfg")) fileName = FILESDIR "/cppcheck.cfg"; diff --git a/lib/settings.h b/lib/settings.h index b245557cd4d..f36922b0860 100644 --- a/lib/settings.h +++ b/lib/settings.h @@ -95,7 +95,7 @@ class CPPCHECKLIB Settings : public cppcheck::Platform { public: Settings(); - void loadCppcheckCfg(const std::string &executable); + void loadCppcheckCfg(const std::string &exename); /** @brief addons, either filename of python/json file or json data */ std::list addons; From 3a3769aafa0a6e196348a597d1249dc2a3cd2b66 Mon Sep 17 00:00:00 2001 From: chrchr Date: Mon, 15 Nov 2021 14:17:01 +0100 Subject: [PATCH 7/7] Fix test case --- test/testautovariables.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index 3dc031a5b97..fa6d9d7c338 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -2474,8 +2474,9 @@ class TestAutoVariables : public TestFixture { true); ASSERT_EQUALS("", errout.str()); - check("std::string f(std::string Str, int first, int last) {\n" - " return { Str.begin() + first, Str.begin() + last + 1 };\n" + check("std::string f(std::string s) {\n" + " std::string r = { s.begin(), s.end() };\n" + " return r;\n" "}\n", true); ASSERT_EQUALS("", errout.str());