Skip to content

Commit e81bc42

Browse files
author
Dave Wichers
committed
Enhance the CodeQLReader SARIF parser to include the codeql/java-queries
ruleset version along with the CodeQL toolsuite version so you know both the version of CodeQL and the ruleset version used when scoring it.
1 parent 1fca354 commit e81bc42

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

plugin/src/main/java/org/owasp/benchmarkutils/score/parsers/sarif/CodeQLReader.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@
1919
*/
2020
package org.owasp.benchmarkutils.score.parsers.sarif;
2121

22+
import org.json.JSONArray;
23+
import org.json.JSONException;
24+
import org.json.JSONObject;
2225
import org.owasp.benchmarkutils.score.CweNumber;
26+
import org.owasp.benchmarkutils.score.ResultFile;
27+
import org.owasp.benchmarkutils.score.TestSuiteResults;
2328

2429
public class CodeQLReader extends SarifReader {
2530

@@ -37,4 +42,43 @@ public int mapCwe(int cwe) {
3742
}
3843
return cwe;
3944
}
45+
46+
/**
47+
* Override setVersion to include the version number of the 'codeql/java-queries' ruleset with
48+
* the version of the tool. Since both the tool version and the ruleset version can seperately
49+
* affect the codeQL score.
50+
*/
51+
@Override
52+
public void setVersion(ResultFile resultFile, TestSuiteResults testSuiteResults) {
53+
JSONObject driver = toolDriver(firstRun(resultFile));
54+
55+
String version = "unknown";
56+
if (driver.has("semanticVersion")) {
57+
version = driver.getString("semanticVersion");
58+
} else if (driver.has("version")) {
59+
version = driver.getString("version");
60+
}
61+
62+
// Search for codeql/java-queries ruleset version and add that to the tool version
63+
try {
64+
JSONArray extensions =
65+
firstRun(resultFile).getJSONObject("tool").getJSONArray("extensions");
66+
67+
for (int i = 0; i < extensions.length(); i++) {
68+
JSONObject extension = extensions.getJSONObject(i);
69+
String name = extension.getString("name");
70+
if ("codeql/java-queries".equals(name)) {
71+
// looking for:
72+
// "semanticVersion": "1.1.9+de325133c7a95d84489acdf5a6ced07886ff5c6d",
73+
String rulesetVersion = extension.getString("semanticVersion");
74+
rulesetVersion = rulesetVersion.substring(0, rulesetVersion.indexOf('+'));
75+
version += "_w" + rulesetVersion + "rules";
76+
}
77+
}
78+
} catch (JSONException e) {
79+
// Do nothing it if can't be found.
80+
}
81+
82+
testSuiteResults.setToolVersion(version);
83+
}
4084
}

plugin/src/main/java/org/owasp/benchmarkutils/score/parsers/sarif/SarifReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ private String sarifToolName(ResultFile resultFile) {
6363
return toolDriver(firstRun(resultFile)).getString("name");
6464
}
6565

66-
private static JSONObject firstRun(ResultFile resultFile) {
66+
static JSONObject firstRun(ResultFile resultFile) {
6767
return resultFile.json().getJSONArray("runs").getJSONObject(0);
6868
}
6969

70-
private static JSONObject toolDriver(JSONObject run) {
70+
static JSONObject toolDriver(JSONObject run) {
7171
return run.getJSONObject("tool").getJSONObject("driver");
7272
}
7373

plugin/src/test/java/org/owasp/benchmarkutils/score/parsers/sarif/CodeQLReaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void readerHandlesGivenResultFile() throws Exception {
5151
assertEquals(TestSuiteResults.ToolType.SAST, result.getToolType());
5252

5353
assertEquals("CodeQL", result.getToolName());
54-
assertEquals("2.13.1", result.getToolVersion());
54+
assertEquals("2.13.1_w0.6.1rules", result.getToolVersion());
5555

5656
assertEquals(2, result.getTotalResults());
5757

0 commit comments

Comments
 (0)