Skip to content

Commit 9d708ce

Browse files
make tags field optional (for V25 results) (#152)
1 parent f6dcf0b commit 9d708ce

File tree

4 files changed

+93
-10
lines changed

4 files changed

+93
-10
lines changed

plugin/src/main/java/org/owasp/benchmarkutils/score/parsers/SonarQubeJsonReader.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,18 @@ private TestCaseResult parseSonarQubeQualityIssue(JSONObject finding) {
131131
tcr.setNumber(testNumber(filename));
132132
String rule = finding.getString("rule");
133133
String squid = rule.substring(rule.indexOf(":") + 1);
134-
if (squid == null || squid.equals("none")) {
134+
135+
if (squid.equals("none")) {
135136
return null;
136137
}
137-
int cwe = SonarQubeReader.cweLookup(squid);
138-
tcr.setCWE(cwe);
139-
tcr.setCategory(finding.getJSONArray("tags").toString());
138+
139+
tcr.setCWE(SonarQubeReader.cweLookup(squid));
140140
tcr.setEvidence(finding.getString("message"));
141+
142+
if (finding.has("tags")) {
143+
tcr.setCategory(finding.getJSONArray("tags").toString());
144+
}
145+
141146
return tcr;
142147
}
143148

plugin/src/main/java/org/owasp/benchmarkutils/score/parsers/SonarQubeReader.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,16 @@ public static int cweLookup(String squidNumber) {
515515
.WEAK_CRYPTO_ALGO; // Benchmark Vuln: Encryption algorithms should be used
516516
// with secure mode and padding scheme
517517
case "S5547":
518+
case "S4790":
518519
return CweNumber
519520
.WEAK_CRYPTO_ALGO; // Benchmark Vuln: Cipher algorithms should be robust
521+
case "S3330":
522+
return CweNumber.COOKIE_WITHOUT_HTTPONLY;
520523

524+
case "S1153":
525+
case "S6851":
526+
case "S6853":
527+
case "S2119":
521528
case "CallToDeprecatedMethod":
522529
case "ClassVariableVisibilityCheck":
523530
case "DuplicatedBlocks":

plugin/src/test/java/org/owasp/benchmarkutils/score/parsers/SonarQubeJsonReaderTest.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,31 @@
3030

3131
public class SonarQubeJsonReaderTest extends ReaderTestBase {
3232

33-
private ResultFile resultFile;
33+
private ResultFile resultFileV9;
34+
private ResultFile resultFileV25;
3435

3536
@BeforeEach
3637
void setUp() {
37-
resultFile = TestHelper.resultFileOf("testfiles/Benchmark_sonarqube-v9.1.0.47736.json");
38+
resultFileV9 = TestHelper.resultFileOf("testfiles/Benchmark_sonarqube-v9.1.0.47736.json");
39+
resultFileV25 =
40+
TestHelper.resultFileOf("testfiles/Benchmark_sonarqube-v25.1.0.102122.json");
3841
BenchmarkScore.TESTCASENAME = "BenchmarkTest";
3942
}
4043

4144
@Test
42-
public void onlySonarQubeJsonReaderReportsCanReadAsTrue() {
43-
assertOnlyMatcherClassIs(this.resultFile, SonarQubeJsonReader.class);
45+
public void onlySonarQubeJsonReaderReportsCanReadAsTrueForV9() {
46+
assertOnlyMatcherClassIs(this.resultFileV9, SonarQubeJsonReader.class);
4447
}
4548

4649
@Test
47-
void readerHandlesGivenResultFile() throws Exception {
50+
public void onlySonarQubeJsonReaderReportsCanReadAsTrueForV25() {
51+
assertOnlyMatcherClassIs(this.resultFileV25, SonarQubeJsonReader.class);
52+
}
53+
54+
@Test
55+
void readerHandlesGivenV9ResultFile() throws Exception {
4856
SonarQubeJsonReader reader = new SonarQubeJsonReader();
49-
TestSuiteResults result = reader.parse(resultFile);
57+
TestSuiteResults result = reader.parse(resultFileV9);
5058

5159
assertEquals(TestSuiteResults.ToolType.SAST, result.getToolType());
5260
assertFalse(result.isCommercial());
@@ -57,4 +65,19 @@ void readerHandlesGivenResultFile() throws Exception {
5765
assertEquals(CweNumber.WEAK_CRYPTO_ALGO, result.get(1).get(0).getCWE());
5866
assertEquals(CweNumber.SQL_INJECTION, result.get(2).get(0).getCWE());
5967
}
68+
69+
@Test
70+
void readerHandlesGivenV25ResultFile() throws Exception {
71+
SonarQubeJsonReader reader = new SonarQubeJsonReader();
72+
TestSuiteResults result = reader.parse(resultFileV25);
73+
74+
assertEquals(TestSuiteResults.ToolType.SAST, result.getToolType());
75+
assertFalse(result.isCommercial());
76+
assertEquals("SonarQube", result.getToolName());
77+
78+
assertEquals(2, result.getTotalResults());
79+
80+
assertEquals(CweNumber.SQL_INJECTION, result.get(1).get(0).getCWE());
81+
assertEquals(CweNumber.WEAK_CRYPTO_ALGO, result.get(2).get(0).getCWE());
82+
}
6083
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{
2+
"date": "Tuesday, Jan 01, 1970",
3+
"inNewCodePeriod": false,
4+
"allBugs": true,
5+
"fixMissingRule": false,
6+
"noSecurityHotspot": false,
7+
"noRulesInReport": true,
8+
"vulnerabilityPhrase": "Vulnerability",
9+
"noCoverage": true,
10+
"vulnerabilityPluralPhrase": "Vulnerabilities",
11+
"sonarBaseURL": "http://localhost:9876",
12+
"sonarComponent": "benchmark",
13+
"rules": {},
14+
"issues": [
15+
{
16+
"rule": "java:S2077",
17+
"severity": "CRITICAL",
18+
"status": "TO_REVIEW",
19+
"component": "src/main/java/org/owasp/benchmark/testcode/BenchmarkTest00001.java",
20+
"line": 57,
21+
"description": "Formatting SQL queries is security-sensitive",
22+
"message": "Make sure using a dynamically formatted SQL query is safe here.",
23+
"key": "e1518810-c118-4cad-ae23-f337cf913d65"
24+
},
25+
{
26+
"rule": "java:S5547",
27+
"severity": "CRITICAL",
28+
"status": "OPEN",
29+
"component": "src/main/java/org/owasp/benchmark/testcode/BenchmarkTest00002.java",
30+
"line": 72,
31+
"description": "Cipher algorithms should be robust",
32+
"message": "Use a strong cipher algorithm.",
33+
"key": "ffecce86-2afe-4fe3-b5b2-f06e24d549db"
34+
}
35+
],
36+
"hotspotKeys": [
37+
"9012d4af-be33-4e0d-8c68-705d8fef08c4",
38+
"0c0fbd12-b778-44b8-a0f6-dbfa9afc0872"
39+
],
40+
"deltaAnalysis": "No",
41+
"qualityGateStatus": false,
42+
"summary": {
43+
"blocker": 0,
44+
"critical": 1015,
45+
"major": 3072,
46+
"minor": 6613
47+
}
48+
}

0 commit comments

Comments
 (0)