From 8e414d83c1f8a776db72bf667e104382ce48c19d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 20 Nov 2023 10:21:12 +0100 Subject: [PATCH] Fix #12181 (Suppressions: allow that id with * is added) --- lib/suppressions.cpp | 17 ++++++++--------- test/testsuppressions.cpp | 9 +++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/suppressions.cpp b/lib/suppressions.cpp index d395a4c1ed2..af5470423ee 100644 --- a/lib/suppressions.cpp +++ b/lib/suppressions.cpp @@ -58,9 +58,10 @@ static bool isAcceptedErrorIdChar(char c) case '_': case '-': case '.': + case '*': return true; default: - return std::isalnum(c); + return c > 0 && std::isalnum(c); } } @@ -255,14 +256,12 @@ std::string Suppressions::addSuppression(Suppressions::Suppression suppression) if (suppression.errorId.empty() && suppression.hash == 0) return "Failed to add suppression. No id."; - if (suppression.errorId != "*") { - for (std::string::size_type pos = 0; pos < suppression.errorId.length(); ++pos) { - if (suppression.errorId[pos] < 0 || !isAcceptedErrorIdChar(suppression.errorId[pos])) { - return "Failed to add suppression. Invalid id \"" + suppression.errorId + "\""; - } - if (pos == 0 && std::isdigit(suppression.errorId[pos])) { - return "Failed to add suppression. Invalid id \"" + suppression.errorId + "\""; - } + for (std::string::size_type pos = 0; pos < suppression.errorId.length(); ++pos) { + if (!isAcceptedErrorIdChar(suppression.errorId[pos])) { + return "Failed to add suppression. Invalid id \"" + suppression.errorId + "\""; + } + if (pos == 0 && std::isdigit(suppression.errorId[pos])) { + return "Failed to add suppression. Invalid id \"" + suppression.errorId + "\""; } } diff --git a/test/testsuppressions.cpp b/test/testsuppressions.cpp index 87aee88a02a..2c8eccf06bd 100644 --- a/test/testsuppressions.cpp +++ b/test/testsuppressions.cpp @@ -51,6 +51,7 @@ class TestSuppressions : public TestFixture { TEST_CASE(suppressionsDosFormat); // Ticket #1836 TEST_CASE(suppressionsFileNameWithColon); // Ticket #1919 - filename includes colon TEST_CASE(suppressionsGlob); + TEST_CASE(suppressionsGlobId); TEST_CASE(suppressionsFileNameWithExtraPath); TEST_CASE(suppressionsSettings); TEST_CASE(suppressionsSettingsThreads); @@ -171,6 +172,14 @@ class TestSuppressions : public TestFixture { } } + void suppressionsGlobId() const { + Suppressions suppressions; + std::istringstream s("a*\n"); + ASSERT_EQUALS("", suppressions.parseFile(s)); + ASSERT_EQUALS(true, suppressions.isSuppressed(errorMessage("abc", "xyz.cpp", 1))); + ASSERT_EQUALS(false, suppressions.isSuppressed(errorMessage("def", "xyz.cpp", 1))); + } + void suppressionsFileNameWithExtraPath() const { // Ticket #2797 Suppressions suppressions;