diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index 924009ed018..2977313e861 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -996,6 +996,10 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a "bughunting", "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 (!mSettings.premiumArgs.empty()) @@ -1683,7 +1687,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 +1940,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/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) diff --git a/test/cli/premium_test.py b/test/cli/premium_test.py index 56e88eb5e74..42aa886c3a3 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,13 @@ 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) - assert '' in stdout - assert '[unusedVariable]' in stderr + exitcode, _, stderr = cppcheck(['--premium=autosar', '--xml', test_file], cppcheck_exe=exe) + assert exitcode == 0 + 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