Skip to content

Commit

Permalink
Fix #12341 (If --premium=safety is used then go to "safety mode". do …
Browse files Browse the repository at this point in the history
…not override this in cppcheck.cfg) (#5872)
  • Loading branch information
danmar committed Jan 12, 2024
1 parent 3fb85f9 commit 14e540a
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 1 deletion.
2 changes: 2 additions & 0 deletions cli/cmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -890,6 +890,8 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a

// Special Cppcheck Premium options
else if (std::strncmp(argv[i], "--premium=", 10) == 0 && isCppcheckPremium()) {
if (std::strcmp(argv[i], "--premium=safety") == 0)
mSettings.safety = true;
if (!mSettings.premiumArgs.empty())
mSettings.premiumArgs += " ";
const std::string p(argv[i] + 10);
Expand Down
2 changes: 1 addition & 1 deletion lib/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ std::string Settings::loadCppcheckCfg()
const auto& v = it->second;
if (!v.is<bool>())
return "'safety' is not a bool";
safety = v.get<bool>();
safety = safety || v.get<bool>();
}
}

Expand Down
12 changes: 12 additions & 0 deletions test/testcmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ class TestCmdlineParser : public TestFixture {
TEST_CASE(maxConfigsMissingCount);
TEST_CASE(maxConfigsInvalid);
TEST_CASE(maxConfigsTooSmall);
TEST_CASE(premiumSafety);
TEST_CASE(reportProgress1);
TEST_CASE(reportProgress2);
TEST_CASE(reportProgress3);
Expand Down Expand Up @@ -1186,6 +1187,17 @@ class TestCmdlineParser : public TestFixture {
ASSERT_EQUALS("cppcheck: error: argument to '--max-configs=' must be greater than 0.\n", logger->str());
}

void premiumSafety() {
REDIRECT;
const char * const argv[] = {"cppcheck", "--premium=safety", "file.cpp"};
settings->safety = false;
settings->cppcheckCfgProductName = "Cppcheck Premium 0.0.0";
ASSERT_EQUALS(CmdLineParser::Result::Success, parser->parseFromArgs(3, argv));
ASSERT_EQUALS(true, settings->safety);
settings->safety = false;
settings->cppcheckCfgProductName.clear();
}

void reportProgress1() {
REDIRECT;
const char * const argv[] = {"cppcheck", "--report-progress", "file.cpp"};
Expand Down
29 changes: 29 additions & 0 deletions test/testsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class TestSettings : public TestFixture {
void run() override {
TEST_CASE(simpleEnableGroup);
TEST_CASE(loadCppcheckCfg);
TEST_CASE(loadCppcheckCfgSafety);
}

void simpleEnableGroup() const {
Expand Down Expand Up @@ -209,6 +210,34 @@ class TestSettings : public TestFixture {

// TODO: test with FILESDIR
}

void loadCppcheckCfgSafety() const
{
// Test the "safety" flag
{
Settings s;
s.safety = false;
ScopedFile file("cppcheck.cfg", "{}");
ASSERT_EQUALS("", s.loadCppcheckCfg());
ASSERT_EQUALS(false, s.safety);
}

{
Settings s;
s.safety = true;
ScopedFile file("cppcheck.cfg", "{\"safety\": false}");
ASSERT_EQUALS("", s.loadCppcheckCfg());
ASSERT_EQUALS(true, s.safety);
}

{
Settings s;
s.safety = false;
ScopedFile file("cppcheck.cfg", "{\"safety\": true}");
ASSERT_EQUALS("", s.loadCppcheckCfg());
ASSERT_EQUALS(true, s.safety);
}
}
};

REGISTER_TEST(TestSettings)

0 comments on commit 14e540a

Please sign in to comment.