Skip to content

Commit 4a22256

Browse files
committed
fixed #13386 - report inline suppressions with invalid type
1 parent 21163e8 commit 4a22256

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

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
@@ -703,6 +703,19 @@ class TestSuppressions : public TestFixture {
703703
"[test.cpp:3:5]: (error) Uninitialized variable: a [uninitvar]\n"
704704
"[test.cpp:5:5]: (error) Uninitialized variable: b [uninitvar]\n", errout_str());
705705

706+
ASSERT_EQUALS(1, (this->*check)("// cppcheck-suppress: id\n"
707+
"// cppcheck-suppress-unknown id\n"
708+
"// cppcheck-suppress-begin-unknown id\n"
709+
"// cppcheck-suppress-begin id4\n"
710+
"void f() {}\n"
711+
"// cppcheck-suppress-end-unknown id4\n",
712+
""));
713+
ASSERT_EQUALS("[test.cpp:1:0]: (error) unknown suppression type 'cppcheck-suppress:' [invalidSuppression]\n"
714+
"[test.cpp:2:0]: (error) unknown suppression type 'cppcheck-suppress-unknown' [invalidSuppression]\n"
715+
"[test.cpp:3:0]: (error) unknown suppression type 'cppcheck-suppress-begin-unknown' [invalidSuppression]\n"
716+
"[test.cpp:6:0]: (error) unknown suppression type 'cppcheck-suppress-end-unknown' [invalidSuppression]\n"
717+
"[test.cpp:4:0]: (error) Suppress Begin: No matching end [invalidSuppression]\n", errout_str());
718+
706719
ASSERT_EQUALS(1, (this->*check)("void f() {\n"
707720
" int a;\n"
708721
" // cppcheck-suppress-begin uninitvar\n"

0 commit comments

Comments
 (0)