diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 3f1d283c2..997853016 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -1361,13 +1361,23 @@ void CppCheck::executeAddons(const std::vector& files) picojson::object obj = res.get(); - const std::string fileName = obj["file"].get(); - const int64_t lineNumber = obj["linenr"].get(); - const int64_t column = obj["column"].get(); - ErrorMessage errmsg; - errmsg.callStack.emplace_back(ErrorMessage::FileLocation(fileName, lineNumber, column)); + if (obj.count("file") > 0) { + const std::string fileName = obj["file"].get(); + const int64_t lineNumber = obj["linenr"].get(); + const int64_t column = obj["column"].get(); + errmsg.callStack.emplace_back(ErrorMessage::FileLocation(fileName, lineNumber, column)); + } else if (obj.count("loc") > 0) { + for (const picojson::value &locvalue: obj["loc"].get()) { + picojson::object loc = locvalue.get(); + const std::string fileName = loc["file"].get(); + const int64_t lineNumber = loc["linenr"].get(); + const int64_t column = loc["column"].get(); + const std::string info = loc["info"].get(); + errmsg.callStack.emplace_back(ErrorMessage::FileLocation(fileName, info, lineNumber, column)); + } + } errmsg.id = obj["addon"].get() + "-" + obj["errorId"].get(); const std::string text = obj["message"].get(); @@ -1376,7 +1386,7 @@ void CppCheck::executeAddons(const std::vector& files) errmsg.severity = Severity::fromString(severity); if (errmsg.severity == Severity::SeverityType::none) continue; - errmsg.file0 = fileName; + errmsg.file0 = ((files.size() == 1) ? files[0] : ""); reportErr(errmsg); }