Skip to content

Commit a8f1f9e

Browse files
committed
bail out when -rule-file input lacks an ID
1 parent 472c0ad commit a8f1f9e

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

cli/cmdlineparser.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,11 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
11331133
return Result::Fail;
11341134
}
11351135

1136+
if (rule.id.empty()) {
1137+
mLogger.printError("unable to load rule-file '" + ruleFile + "' - a rule is lacking an id.");
1138+
return Result::Fail;
1139+
}
1140+
11361141
if (rule.tokenlist.empty()) {
11371142
mLogger.printError("unable to load rule-file '" + ruleFile + "' - a rule is lacking a tokenlist.");
11381143
return Result::Fail;

lib/cppcheck.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1169,7 +1169,7 @@ void CppCheck::executeRules(const std::string &tokenlist, const TokenList &list)
11691169
}
11701170

11711171
for (const Settings::Rule &rule : mSettings.rules) {
1172-
if (rule.id.empty() || rule.severity == Severity::none || rule.tokenlist != tokenlist)
1172+
if (rule.severity == Severity::none || rule.tokenlist != tokenlist)
11731173
continue;
11741174

11751175
if (!mSettings.quiet) {

test/testcmdlineparser.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ class TestCmdlineParser : public TestFixture {
349349
TEST_CASE(ruleFileMissingTokenList);
350350
TEST_CASE(ruleFileUnknownTokenList);
351351
TEST_CASE(ruleFileInvalidPattern);
352+
TEST_CASE(ruleFileMissingId);
352353
#else
353354
TEST_CASE(ruleFileNotSupported);
354355
#endif
@@ -2354,6 +2355,20 @@ class TestCmdlineParser : public TestFixture {
23542355
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parser->parseFromArgs(3, argv));
23552356
ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - pattern '.+\\' failed to compile (pcre_compile failed: \\ at end of pattern).\n", logger->str());
23562357
}
2358+
2359+
void ruleFileMissingId() {
2360+
REDIRECT;
2361+
ScopedFile file("rule.xml",
2362+
"<rule>\n"
2363+
"<pattern>.+</pattern>\n"
2364+
"<message>\n"
2365+
"<id/>"
2366+
"</message>\n"
2367+
"</rule>\n");
2368+
const char * const argv[] = {"cppcheck", "--rule-file=rule.xml", "file.cpp"};
2369+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parser->parseFromArgs(3, argv));
2370+
ASSERT_EQUALS("cppcheck: error: unable to load rule-file 'rule.xml' - a rule is lacking an id.\n", logger->str());
2371+
}
23572372
#else
23582373
void ruleFileNotSupported() {
23592374
REDIRECT;

0 commit comments

Comments
 (0)