From 85b7902512bba1ffb5b04c49750d82f5d8f79630 Mon Sep 17 00:00:00 2001 From: William Jakobsson Date: Wed, 8 Apr 2026 13:37:54 +0200 Subject: [PATCH 1/2] fix: strip trailing string from Misra C id extraction --- lib/errorlogger.cpp | 9 +++++++-- test/testerrorlogger.cpp | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/errorlogger.cpp b/lib/errorlogger.cpp index 07332d94fe9..c2eaac30e30 100644 --- a/lib/errorlogger.cpp +++ b/lib/errorlogger.cpp @@ -1080,8 +1080,13 @@ std::string getGuideline(const std::string &errId, ReportType reportType, case ReportType::misraC2012: case ReportType::misraC2023: case ReportType::misraC2025: - if (errId.rfind("misra-c20", 0) == 0 || errId.rfind("premium-misra-c-20", 0) == 0) - guideline = errId.substr(errId.rfind('-') + 1); + if (errId.rfind("misra-c20", 0) == 0 || errId.rfind("premium-misra-c-20", 0) == 0) { + auto dashPos = errId.rfind('-'); + while (dashPos != std::string::npos && isalpha(errId[dashPos + 1])) { + dashPos = errId.rfind('-', dashPos - 1); + } + guideline = errId.substr(dashPos + 1, errId.find('-', dashPos + 1) - dashPos - 1); + } break; case ReportType::misraCpp2008: if (errId.rfind("premium-misra-cpp-2008", 0) == 0) diff --git a/test/testerrorlogger.cpp b/test/testerrorlogger.cpp index 01bdfc7f8ce..812ea500299 100644 --- a/test/testerrorlogger.cpp +++ b/test/testerrorlogger.cpp @@ -361,6 +361,8 @@ class TestErrorLogger : public TestFixture { testReportType(ReportType::misraCpp2023, Severity::style, "premium-misra-cpp-2023-dir-0.3.2", "Required", "Dir 0.3.2"); testReportType(ReportType::misraCpp2008, Severity::style, "premium-misra-cpp-2008-3-4-1", "Required", "3-4-1"); testReportType(ReportType::misraC2012, Severity::style, "premium-misra-c-2012-dir-4.6", "Advisory", "Dir 4.6"); + testReportType(ReportType::misraC2012, Severity::style, "premium-misra-c-2012-10.4-positive-number", "Required", "10.4"); + testReportType(ReportType::misraC2012, Severity::style, "premium-misra-c-2012-10.4", "Required", "10.4"); testReportType(ReportType::misraC2012, Severity::style, "misra-c2012-dir-4.6", "Advisory", "Dir 4.6"); testReportType(ReportType::certC, Severity::error, "resourceLeak", "L3", "FIO42-C"); } From 45ee4afe088fa40f4e942bf79e637d0d83093dfb Mon Sep 17 00:00:00 2001 From: William Jakobsson Date: Wed, 8 Apr 2026 15:43:15 +0200 Subject: [PATCH 2/2] fix: strip trailing string from Misra C id extraction --- lib/errorlogger.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/errorlogger.cpp b/lib/errorlogger.cpp index c2eaac30e30..ad23c679649 100644 --- a/lib/errorlogger.cpp +++ b/lib/errorlogger.cpp @@ -1081,11 +1081,11 @@ std::string getGuideline(const std::string &errId, ReportType reportType, case ReportType::misraC2023: case ReportType::misraC2025: if (errId.rfind("misra-c20", 0) == 0 || errId.rfind("premium-misra-c-20", 0) == 0) { - auto dashPos = errId.rfind('-'); - while (dashPos != std::string::npos && isalpha(errId[dashPos + 1])) { - dashPos = errId.rfind('-', dashPos - 1); - } - guideline = errId.substr(dashPos + 1, errId.find('-', dashPos + 1) - dashPos - 1); + auto pos1 = errId.find("20") + 5; + if (errId.compare(pos1,4,"dir-",0,4) == 0) + pos1 += 4; + const auto endpos = errId.find('-', pos1); + guideline = errId.substr(pos1, endpos-pos1); } break; case ReportType::misraCpp2008: