From f558668903e304b1ab25e07f18d9906ceeca4414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 29 Aug 2024 16:12:29 +0200 Subject: [PATCH 1/4] Fix #13047 (....) --- cli/cppcheckexecutor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/cppcheckexecutor.cpp b/cli/cppcheckexecutor.cpp index a60e3040542..a39685f03f4 100644 --- a/cli/cppcheckexecutor.cpp +++ b/cli/cppcheckexecutor.cpp @@ -311,7 +311,7 @@ int CppCheckExecutor::check_internal(const Settings& settings) const stdLogger.reportErr(ErrorMessage::getXMLFooter()); } - if (settings.safety && (stdLogger.hasCriticalErrors() || returnValue != 0)) + if (settings.safety && stdLogger.hasCriticalErrors()) return EXIT_FAILURE; if (returnValue) From e5de9d95c585050dc861fdc812f18ed580d7ef0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 29 Aug 2024 18:22:05 +0200 Subject: [PATCH 2/4] test that exitcode is 0 when there is no critical errors --- test/cli/premium_test.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/cli/premium_test.py b/test/cli/premium_test.py index 56e88eb5e74..dd9693883bb 100644 --- a/test/cli/premium_test.py +++ b/test/cli/premium_test.py @@ -26,7 +26,7 @@ def copy_cppcheck_premium(tmpdir): "addons": [], "productName": "NAME", "about": "NAME", - "safety": false + "safety": true } """.replace('NAME', PRODUCT_NAME)) @@ -43,7 +43,8 @@ def test_misra_c_builtin_style_checks(tmpdir): f.write('void foo() { int x; y = 0; }') exe = copy_cppcheck_premium(tmpdir) - _, stdout, stderr = cppcheck(['--premium=autosar', test_file], cppcheck_exe=exe) + exitcode, stdout, stderr = cppcheck(['--premium=autosar', test_file], cppcheck_exe=exe) + assert exitcode == 0 assert '' in stdout assert '[unusedVariable]' in stderr From 793a324690850d4b6f05207beaea7acbd8ad346e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 29 Aug 2024 18:51:12 +0200 Subject: [PATCH 3/4] add --premium=safety-off --- cli/cmdlineparser.cpp | 10 ++++++++-- test/cli/premium_test.py | 11 ++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index 924009ed018..3613dfe9449 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -994,10 +994,13 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a "misra-c++-2023", "misra-cpp-2023", "bughunting", - "safety"}; + "safety", + "safety-off"}; if (std::strcmp(argv[i], "--premium=safety") == 0) mSettings.safety = true; + if (std::strcmp(argv[i], "--premium=safety-off") == 0) + mSettings.safety = false; if (!mSettings.premiumArgs.empty()) mSettings.premiumArgs += " "; const std::string p(argv[i] + 10); @@ -1683,7 +1686,8 @@ void CmdLineParser::printHelp() const " Other:\n" " * bughunting Soundy analysis\n" " * cert-c-int-precision=BITS Integer precision to use in Cert C analysis.\n" - " * safety Safe mode\n"; + " * safety Turn on safety certified behavior (ON by default)\n" + " * safety-off Turn off safety certified behavior\n"; } oss << @@ -1935,6 +1939,8 @@ bool CmdLineParser::loadAddons(Settings& settings) bool CmdLineParser::loadCppcheckCfg() { + if (!mSettings.cppcheckCfgProductName.empty()) + return true; const std::string cfgErr = Settings::loadCppcheckCfg(mSettings, mSuppressions, mSettings.debuglookup || mSettings.debuglookupConfig); if (!cfgErr.empty()) { mLogger.printError("could not load cppcheck.cfg - " + cfgErr); diff --git a/test/cli/premium_test.py b/test/cli/premium_test.py index dd9693883bb..42aa886c3a3 100644 --- a/test/cli/premium_test.py +++ b/test/cli/premium_test.py @@ -43,8 +43,13 @@ def test_misra_c_builtin_style_checks(tmpdir): f.write('void foo() { int x; y = 0; }') exe = copy_cppcheck_premium(tmpdir) - exitcode, stdout, stderr = cppcheck(['--premium=autosar', test_file], cppcheck_exe=exe) + + exitcode, _, stderr = cppcheck(['--premium=autosar', '--xml', test_file], cppcheck_exe=exe) assert exitcode == 0 - assert '' in stdout - assert '[unusedVariable]' in stderr + assert 'id="unusedVariable"' in stderr + assert 'id="checkersReport"' in stderr + exitcode, _, stderr = cppcheck(['--premium=autosar', '--premium=safety-off', '--xml', test_file], cppcheck_exe=exe) + assert exitcode == 0 + assert 'id="unusedVariable"' in stderr + assert 'id="checkersReport"' not in stderr From 119deb5cf8602df01577000f04a371c99c27e340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 29 Aug 2024 19:04:32 +0200 Subject: [PATCH 4/4] safety --- cli/cmdlineparser.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index 3613dfe9449..2977313e861 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -994,13 +994,14 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a "misra-c++-2023", "misra-cpp-2023", "bughunting", - "safety", - "safety-off"}; + "safety"}; + if (std::strcmp(argv[i], "--premium=safety-off") == 0) { + mSettings.safety = false; + continue; + } if (std::strcmp(argv[i], "--premium=safety") == 0) mSettings.safety = true; - if (std::strcmp(argv[i], "--premium=safety-off") == 0) - mSettings.safety = false; if (!mSettings.premiumArgs.empty()) mSettings.premiumArgs += " "; const std::string p(argv[i] + 10);