Skip to content

Commit 08486d7

Browse files
committed
fixed #13386 - report inline suppressions with invalid type [skip ci]
1 parent 949c9d1 commit 08486d7

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

lib/preprocessor.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,11 @@ static bool parseInlineSuppressionCommentToken(const simplecpp::Token *tok, std:
105105

106106
// determine prefix if specified
107107
if (posEndComment >= (pos1 + cppchecksuppress.size() + 1)) {
108-
if (comment.at(pos1 + cppchecksuppress.size()) != '-')
108+
const std::string suppressCmdString = comment.substr(pos1, pos2-pos1-1);
109+
if (comment.at(pos1 + cppchecksuppress.size()) != '-') {
110+
bad.emplace_back(tok->location.file(), tok->location.line, 0, "unknown suppression type '" + suppressCmdString + "'"); // TODO: set column
109111
return false;
112+
}
110113

111114
const unsigned int argumentLength =
112115
posEndComment - (pos1 + cppchecksuppress.size() + 1);
@@ -122,8 +125,10 @@ static bool parseInlineSuppressionCommentToken(const simplecpp::Token *tok, std:
122125
errorType = SuppressionList::Type::blockEnd;
123126
else if ("macro" == suppressTypeString)
124127
errorType = SuppressionList::Type::macro;
125-
else
128+
else {
129+
bad.emplace_back(tok->location.file(), tok->location.line, 0, "unknown suppression type '" + suppressCmdString + "'"); // TODO: set column
126130
return false;
131+
}
127132
}
128133

129134
if (comment[pos2] == '[') {

test/testsuppressions.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,19 @@ class TestSuppressions : public TestFixture {
716716
"[test.cpp:4:0]: (error) Failed to add suppression. Invalid id \":id3\" [invalidSuppression]\n"
717717
"[test.cpp:5:0]: (information) Unmatched suppression: id2 [unmatchedSuppression]\n", errout_str()); // TODO: should we report the location of the suppression instead?
718718

719+
ASSERT_EQUALS(1, (this->*check)("// cppcheck-suppress: id\n"
720+
"// cppcheck-suppress-unknown id\n"
721+
"// cppcheck-suppress-begin-unknown id\n"
722+
"// cppcheck-suppress-begin id4\n"
723+
"void f() {}\n"
724+
"// cppcheck-suppress-end-unknown id4\n",
725+
""));
726+
ASSERT_EQUALS("[test.cpp:1:0]: (error) unknown suppression type 'cppcheck-suppress:' [invalidSuppression]\n"
727+
"[test.cpp:2:0]: (error) unknown suppression type 'cppcheck-suppress-unknown' [invalidSuppression]\n"
728+
"[test.cpp:3:0]: (error) unknown suppression type 'cppcheck-suppress-begin-unknown' [invalidSuppression]\n"
729+
"[test.cpp:6:0]: (error) unknown suppression type 'cppcheck-suppress-end-unknown' [invalidSuppression]\n"
730+
"[test.cpp:4:0]: (error) Suppress Begin: No matching end [invalidSuppression]\n", errout_str());
731+
719732
ASSERT_EQUALS(1, (this->*check)("void f() {\n"
720733
" int a;\n"
721734
" // cppcheck-suppress-begin uninitvar\n"

0 commit comments

Comments
 (0)