diff --git a/lib/errorlogger.cpp b/lib/errorlogger.cpp index 35552d313f2..61480228380 100644 --- a/lib/errorlogger.cpp +++ b/lib/errorlogger.cpp @@ -379,8 +379,17 @@ void ErrorMessage::deserialize(const std::string &data) } } -std::string ErrorMessage::getXMLHeader(const std::string& productName) -{ +std::string ErrorMessage::getXMLHeader(std::string productName) +{ + std::string version = CppCheck::version(); + if (!productName.empty() && std::isdigit(productName.back())) { + const std::string::size_type pos = productName.find_last_not_of(".0123456789"); + if (pos > 1 && pos != std::string::npos && productName[pos] == ' ') { + version = productName.substr(pos+1); + productName.erase(pos); + } + } + tinyxml2::XMLPrinter printer; // standard xml header @@ -393,7 +402,7 @@ std::string ErrorMessage::getXMLHeader(const std::string& productName) printer.OpenElement("cppcheck", false); if (!productName.empty()) printer.PushAttribute("product-name", productName.c_str()); - printer.PushAttribute("version", CppCheck::version()); + printer.PushAttribute("version", version.c_str()); printer.CloseElement(false); printer.OpenElement("errors", false); diff --git a/lib/errorlogger.h b/lib/errorlogger.h index b47baff77ec..ef8d8a71937 100644 --- a/lib/errorlogger.h +++ b/lib/errorlogger.h @@ -148,7 +148,7 @@ class CPPCHECKLIB ErrorMessage { */ std::string toXML() const; - static std::string getXMLHeader(const std::string& productName); + static std::string getXMLHeader(std::string productName); static std::string getXMLFooter(); /**