diff --git a/lib/errorlogger.cpp b/lib/errorlogger.cpp index 07332d94fe9..ad23c679649 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 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: 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"); }