Skip to content

Commit b78b49f

Browse files
committed
json-parser: read CWE from Coverity JSON output if available
1 parent df8d918 commit b78b49f

File tree

5 files changed

+77466
-1
lines changed

5 files changed

+77466
-1
lines changed

json-parser.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ void JsonParser::Private::dataError(const std::string &msg) {
116116
<< this->defNumber << ": " << msg << "\n";
117117
}
118118

119-
bool findChildOf(pt::ptree **pDst, pt::ptree &node, const char *key)
119+
template <typename TNode>
120+
bool findChildOf(TNode **pDst, TNode &node, const char *key)
120121
{
121122
if (node.not_found() == node.find(key))
122123
return false;
@@ -284,6 +285,11 @@ void CovTreeDecoder::readNode(
284285
def->checker = defNode.get<std::string>("checkerName");
285286
def->function = valueOf<std::string>(defNode, "functionDisplayName", "");
286287

288+
// read CWE if available
289+
const pt::ptree *checkerProps;
290+
if (findChildOf(&checkerProps, defNode, "checkerProperties"))
291+
def->cwe = valueOf<int>(*checkerProps, "cweCategory", 0);
292+
287293
// count the events and allocate dst array
288294
const pt::ptree &evtList = defNode.get_child("events");
289295
def->events.resize(evtList.size());

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ test_csgrep(csgrep "55-csparser-pylint-copr" )
175175
test_csgrep(csgrep "56-gcc-sparser-clang-error" )
176176
test_csgrep(csgrep "57-gcc-parser-gcc-analyzer-curl")
177177
test_csgrep(csgrep "58-csparser-gcc-analyzer-curl")
178+
test_csgrep(csgrep "59-json-parser-cov-v7-cwe" )
178179
test_csparser(csparser-5.8 00)
179180
test_csparser(csparser-5.8 01)
180181
test_csparser(csparser-5.8 02)

tests/csgrep/59-json-parser-cov-v7-cwe-args.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)