Skip to content

Commit fadc6d4

Browse files
committed
parser-json-sarif: attempt to read generic trace events
... produced by Snyk Code Related: https://issues.redhat.com/browse/OSH-654 Closes: #199
1 parent 9ea9212 commit fadc6d4

File tree

4 files changed

+35481
-646
lines changed

4 files changed

+35481
-646
lines changed

src/lib/parser-json-sarif.cc

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,25 +271,28 @@ static void sarifReadCodeFlow(Defect *pDef, const pt::ptree &cf)
271271
for (const auto &item : *locs) {
272272
const pt::ptree &tfLoc = item.second;
273273

274-
const pt::ptree *kindList;
275-
if (!findChildOf(&kindList, tfLoc, "kinds") || kindList->empty())
276-
// kind of the event not specified
277-
continue;
278-
279-
// concatenate event name
280274
std::string evtName;
281-
for (const auto &kindItem : *kindList) {
282-
const pt::ptree &kind = kindItem.second;
283-
if (!evtName.empty())
284-
evtName += "_";
285-
evtName += kind.data();
275+
const pt::ptree *kindList;
276+
if (findChildOf(&kindList, tfLoc, "kinds")) {
277+
// calculate event name from the `kinds` list
278+
for (const auto &kindItem : *kindList) {
279+
const pt::ptree &kind = kindItem.second;
280+
if (!evtName.empty())
281+
evtName += "_";
282+
evtName += kind.data();
283+
}
286284
}
287285

288286
// append a new event of the specified kind
289287
events.push_back(DefEvent(evtName));
290288
DefEvent &evt = events.back();
291289

292-
evt.verbosityLevel = valueOf<int>(tfLoc, "nestingLevel", 1);
290+
// read/infer verbosity level
291+
evt.verbosityLevel = valueOf<int>(tfLoc, "nestingLevel",
292+
(evt.event.empty())
293+
? /* trace */ 2
294+
: /* info */ 1);
295+
293296
if (!evt.verbosityLevel)
294297
// update key event
295298
keyEventIdx = events.size() - 1U;
@@ -301,6 +304,13 @@ static void sarifReadCodeFlow(Defect *pDef, const pt::ptree &cf)
301304

302305
sarifReadLocation(&evt, *loc);
303306
sarifReadMsg(&evt.msg, *loc);
307+
308+
if (evt.event.empty()) {
309+
// if no `kind` is given, assume a generic trace event
310+
evt.event = "path";
311+
if (evt.msg.empty())
312+
evt.msg = "generic trace event";
313+
}
304314
}
305315

306316
if (events.size() <= 1U)

0 commit comments

Comments
 (0)