Skip to content

Commit a64d95c

Browse files
authored
Add more tests and remove codemod we're not ready for (#459)
* Moves remediators that were for some reason in core-codemods to the framework * Removes a codemod we're not ready to do yet (CodeQL reports vulnerabilities at odds locations in comparison to other tools) * Made tests harder to pass * Styling cleanup
1 parent 1b3fe20 commit a64d95c

File tree

26 files changed

+222
-71
lines changed

26 files changed

+222
-71
lines changed

core-codemods/src/intTest/java/io/codemodder/integration/WebGoat20238Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ void it_remediates_webgoat_2023_8() throws Exception {
6868
assertThat(jwtChange.getChanges().get(0).getLineNumber(), equalTo(113));
6969
assertThat(jwtChange.getChanges().get(1).getLineNumber(), equalTo(140));
7070

71-
verifyCodemodsHitWithChangesetCount(report, "codeql:java/insecure-randomness", 0);
7271
verifyCodemodsHitWithChangesetCount(report, "codeql:java/ssrf", 1);
7372
verifyCodemodsHitWithChangesetCount(report, "codeql:java/xxe", 1);
7473
verifyCodemodsHitWithChangesetCount(report, "codeql:java/sql-injection", 6);
7574
verifyCodemodsHitWithChangesetCount(report, "codeql:java/insecure-cookie", 2);
75+
verifyCodemodsHitWithChangesetCount(report, "codeql:java/unsafe-deserialization", 2);
7676
}
7777
}

core-codemods/src/intTest/java/io/codemodder/integration/WebGoat822Test.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ void it_transforms_webgoat_with_codeql() throws Exception {
171171
assertThat(ajaxJwtChange.getChanges().size(), equalTo(1));
172172
assertThat(ajaxJwtChange.getChanges().get(0).getLineNumber(), equalTo(53));
173173

174-
verifyCodemodsHitWithChangesetCount(report, "codeql:java/insecure-randomness", 0);
175174
verifyCodemodsHitWithChangesetCount(report, "codeql:java/ssrf", 3);
176175
verifyCodemodsHitWithChangesetCount(report, "codeql:java/sql-injection", 5);
177176
verifyCodemodsHitWithChangesetCount(report, "codeql:java/insecure-cookie", 1);

core-codemods/src/main/java/io/codemodder/codemods/DefaultCodemods.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ public static List<Class<? extends CodeChanger>> asList() {
3030
CodeQLHttpResponseSplittingCodemod.class,
3131
CodeQLInputResourceLeakCodemod.class,
3232
CodeQLInsecureCookieCodemod.class,
33-
CodeQLInsecureRandomnessCodemod.class,
3433
CodeQLJDBCResourceLeakCodemod.class,
3534
CodeQLJEXLInjectionCodemod.class,
3635
CodeQLJNDIInjectionCodemod.class,
3736
CodeQLMavenSecureURLCodemod.class,
3837
CodeQLOutputResourceLeakCodemod.class,
38+
CodeQLPredictableSeedCodemod.class,
3939
CodeQLSQLInjectionCodemod.class,
4040
CodeQLSSRFCodemod.class,
4141
CodeQLStackTraceExposureCodemod.class,

core-codemods/src/main/java/io/codemodder/codemods/SonarSSRFCodemod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import com.github.javaparser.ast.CompilationUnit;
44
import io.codemodder.*;
5-
import io.codemodder.codemods.remediators.ssrf.SSRFRemediator;
65
import io.codemodder.codetf.DetectorRule;
76
import io.codemodder.providers.sonar.ProvidedSonarScan;
87
import io.codemodder.providers.sonar.RuleIssue;
98
import io.codemodder.providers.sonar.SonarRemediatingJavaParserChanger;
109
import io.codemodder.remediation.GenericRemediationMetadata;
10+
import io.codemodder.remediation.ssrf.SSRFRemediator;
1111
import io.codemodder.sonar.model.Issue;
1212
import io.codemodder.sonar.model.SonarFinding;
1313
import java.util.List;

core-codemods/src/main/java/io/codemodder/codemods/codeql/CodeQLInsecureRandomnessCodemod.java

Lines changed: 0 additions & 48 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package io.codemodder.codemods.codeql;
2+
3+
import com.contrastsecurity.sarif.Result;
4+
import com.github.javaparser.ast.CompilationUnit;
5+
import io.codemodder.*;
6+
import io.codemodder.codetf.DetectorRule;
7+
import io.codemodder.providers.sarif.codeql.ProvidedCodeQLScan;
8+
import io.codemodder.remediation.GenericRemediationMetadata;
9+
import io.codemodder.remediation.Remediator;
10+
import io.codemodder.remediation.predictableseed.PredictableSeedRemediator;
11+
import java.util.Optional;
12+
import javax.inject.Inject;
13+
14+
/** A codemod for automatically fixing predictable seeds reported by CodeQL. */
15+
@Codemod(
16+
id = "codeql:java/predictable-seed",
17+
reviewGuidance = ReviewGuidance.MERGE_WITHOUT_REVIEW,
18+
importance = Importance.MEDIUM,
19+
executionPriority = CodemodExecutionPriority.HIGH)
20+
public final class CodeQLPredictableSeedCodemod extends CodeQLRemediationCodemod {
21+
22+
private final Remediator<Result> remediator;
23+
24+
@Inject
25+
public CodeQLPredictableSeedCodemod(
26+
@ProvidedCodeQLScan(ruleId = "java/predictable-seed") final RuleSarif sarif) {
27+
super(GenericRemediationMetadata.PREDICTABLE_SEED.reporter(), sarif);
28+
this.remediator = new PredictableSeedRemediator<>();
29+
}
30+
31+
@Override
32+
public DetectorRule detectorRule() {
33+
return new DetectorRule(
34+
"predictable-seed",
35+
"Use of a predictable seed in a secure random number generator",
36+
"https://codeql.github.com/codeql-query-help/java/java-predictable-seed/");
37+
}
38+
39+
@Override
40+
public CodemodFileScanningResult visit(
41+
final CodemodInvocationContext context, final CompilationUnit cu) {
42+
return remediator.remediateAll(
43+
cu,
44+
context.path().toString(),
45+
detectorRule(),
46+
ruleSarif.getResultsByLocationPath(context.path()),
47+
SarifFindingKeyUtil::buildFindingId,
48+
result -> result.getLocations().get(0).getPhysicalLocation().getRegion().getStartLine(),
49+
result ->
50+
Optional.ofNullable(
51+
result.getLocations().get(0).getPhysicalLocation().getRegion().getEndLine()),
52+
result ->
53+
Optional.ofNullable(
54+
result.getLocations().get(0).getPhysicalLocation().getRegion().getStartColumn()));
55+
}
56+
}

core-codemods/src/main/java/io/codemodder/codemods/codeql/CodeQLSSRFCodemod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import com.github.javaparser.ast.CompilationUnit;
44
import io.codemodder.*;
5-
import io.codemodder.codemods.remediators.ssrf.SSRFRemediator;
65
import io.codemodder.codetf.DetectorRule;
76
import io.codemodder.providers.sarif.codeql.ProvidedCodeQLScan;
87
import io.codemodder.remediation.GenericRemediationMetadata;
8+
import io.codemodder.remediation.ssrf.SSRFRemediator;
99
import javax.inject.Inject;
1010

1111
/** A codemod for automatically fixing SQL injection from CodeQL. */

core-codemods/src/main/java/io/codemodder/codemods/semgrep/SemgrepSSRFCodemod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import io.codemodder.ReviewGuidance;
1010
import io.codemodder.RuleSarif;
1111
import io.codemodder.SarifFindingKeyUtil;
12-
import io.codemodder.codemods.remediators.ssrf.SSRFRemediator;
1312
import io.codemodder.codetf.DetectorRule;
1413
import io.codemodder.providers.sarif.semgrep.ProvidedSemgrepScan;
1514
import io.codemodder.remediation.GenericRemediationMetadata;
15+
import io.codemodder.remediation.ssrf.SSRFRemediator;
1616
import javax.inject.Inject;
1717

1818
/**

core-codemods/src/main/java/io/codemodder/codemods/semgrep/SemgrepWeakRandomCodemod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
import io.codemodder.ReviewGuidance;
1010
import io.codemodder.RuleSarif;
1111
import io.codemodder.SarifFindingKeyUtil;
12-
import io.codemodder.codemods.remediators.weakrandom.WeakRandomRemediator;
1312
import io.codemodder.codetf.DetectorRule;
1413
import io.codemodder.providers.sarif.semgrep.ProvidedSemgrepScan;
14+
import io.codemodder.remediation.weakrandom.WeakRandomRemediator;
1515
import javax.inject.Inject;
1616

1717
/**

framework/codemodder-base/src/main/java/io/codemodder/CodemodFileScanningResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public List<UnfixedFinding> unfixedFindings() {
3030
static CodemodFileScanningResult from(
3131
final List<CodemodChange> changes,
3232
final List<UnfixedFinding> unfixedFindings,
33-
CodeTFAiMetadata codeTFAiMetadata) {
33+
final CodeTFAiMetadata codeTFAiMetadata) {
3434
return new AICodemodFileScanningResult(changes, unfixedFindings, codeTFAiMetadata);
3535
}
3636

0 commit comments

Comments
 (0)