Skip to content

Commit

Permalink
fixed safety override
Browse files Browse the repository at this point in the history
  • Loading branch information
firewave committed Mar 1, 2025
1 parent 6b066ea commit f1bb5ad
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 1 deletion.
3 changes: 3 additions & 0 deletions cli/cmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1022,6 +1022,9 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
mSettings.cppHeaderProbe = false;
}

else if (std::strcmp(argv[i], "--no-safety") == 0)
mSettings.safety = false;

// Write results in file
else if (std::strncmp(argv[i], "--output-file=", 14) == 0)
mSettings.outputFile = Path::simplifyPath(argv[i] + 14);
Expand Down
2 changes: 1 addition & 1 deletion lib/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppress
const auto& v = it->second;
if (!v.is<bool>())
return "'safety' is not a bool";
settings.safety = settings.safety || v.get<bool>();
settings.safety = v.get<bool>();
}
}

Expand Down
21 changes: 21 additions & 0 deletions test/cli/other_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2026,6 +2026,27 @@ def test_config_invalid(tmpdir):
]


def test_config_override(tmpdir):
# cppcheck.cfg needs to be next to executable
exe = shutil.copy2(__lookup_cppcheck_exe(), tmpdir)
shutil.copytree(os.path.join(os.path.dirname(__lookup_cppcheck_exe()), 'cfg'), os.path.join(tmpdir, 'cfg'))

test_file = os.path.join(tmpdir, 'test.c')
with open(test_file, 'wt'):
pass

config_file = os.path.join(tmpdir, 'cppcheck.cfg')
with open(config_file, 'wt') as f:
f.write(json.dumps({
'safety': False
}))

exitcode, stdout, stderr, exe = cppcheck_ex(['-q', '--safety', test_file], cwd=tmpdir, cppcheck_exe=exe, remove_checkers_report=False)
assert exitcode == 0, stdout if stdout else stderr
assert stdout.splitlines() == []
assert stderr.splitlines() == []


def test_checkers_report(tmpdir):
test_file = os.path.join(tmpdir, 'test.c')
with open(test_file, 'wt') as f:
Expand Down
32 changes: 32 additions & 0 deletions test/testcmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,10 @@ class TestCmdlineParser : public TestFixture {
TEST_CASE(debugClangOutput);
TEST_CASE(debugXmlMultiple);
TEST_CASE(debugNormalXmlMultiple);
TEST_CASE(safety);
TEST_CASE(safetyOverride);
TEST_CASE(noSafety);
TEST_CASE(noSafetyOverride);

TEST_CASE(ignorepaths1);
TEST_CASE(ignorepaths2);
Expand Down Expand Up @@ -2974,6 +2978,34 @@ class TestCmdlineParser : public TestFixture {
ASSERT_EQUALS("cppcheck: error: printing debug output in XML format does not support multiple input files.\n", logger->str());
}

void safety() {
REDIRECT;
const char * const argv[] = {"cppcheck", "--safety", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv));
ASSERT_EQUALS(true, settings->safety);
}

void safetyOverride() {
REDIRECT;
const char * const argv[] = {"cppcheck", "--no-safety", "--safety", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv));
ASSERT_EQUALS(true, settings->safety);
}

void noSafety() {
REDIRECT;
const char * const argv[] = {"cppcheck", "--no-safety", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv));
ASSERT_EQUALS(false, settings->safety);
}

void noSafetyOverride() {
REDIRECT;
const char * const argv[] = {"cppcheck", "--safety", "--no-safety", "file.cpp"};
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv));
ASSERT_EQUALS(false, settings->safety);
}

void ignorepaths1() {
REDIRECT;
const char * const argv[] = {"cppcheck", "-isrc", "file.cpp"};
Expand Down

0 comments on commit f1bb5ad

Please sign in to comment.