@@ -89,6 +89,8 @@ class SarifTreeDecoder: public AbstractTreeDecoder {
8989
9090 typedef std::map<std::string, int > TCweMap;
9191 TCweMap cweMap;
92+
93+ ImpliedAttrDigger digger;
9294};
9395
9496struct JsonParser ::Private {
@@ -231,6 +233,7 @@ SimpleTreeDecoder::SimpleTreeDecoder(InStream &input):
231233 " imp" ,
232234 " key_event_idx" ,
233235 " language" ,
236+ " tool" ,
234237 };
235238
236239 // known per-event subnodes
@@ -312,6 +315,7 @@ bool SimpleTreeDecoder::readNode(
312315 def->imp = valueOf<int > (defNode, " imp" , 0 );
313316 def->function = valueOf<std::string>(defNode, " function" , " " );
314317 def->language = valueOf<std::string>(defNode, " language" , " " );
318+ def->tool = valueOf<std::string>(defNode, " tool" , " " );
315319
316320 if (defNode.not_found () == defNode.find (" key_event_idx" )) {
317321 // key event not specified, try to guess it
@@ -349,6 +353,9 @@ bool CovTreeDecoder::readNode(
349353 def->function = valueOf<std::string>(defNode, " functionDisplayName" , " " );
350354 def->language = valueOf<std::string>(defNode, " code-language" , " " );
351355
356+ // out of the supported tools, only Coverity produces this data format
357+ def->tool = " coverity" ;
358+
352359 // read CWE if available
353360 const pt::ptree *checkerProps;
354361 if (findChildOf (&checkerProps, defNode, " checkerProperties" ))
@@ -626,5 +633,8 @@ bool SarifTreeDecoder::readNode(
626633 if (findChildOf (&relatedLocs, defNode, " relatedLocations" ))
627634 sarifReadComments (def, *relatedLocs);
628635
636+ this ->digger .inferLangFromChecker (def);
637+ this ->digger .inferToolFromChecker (def);
638+
629639 return true ;
630640}
0 commit comments