From 9f027e01d2a7df32334c9f27a043ef16d8bab0e3 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 16:25:07 +0200 Subject: [PATCH 1/8] Minor improvements --- .../soot/dotnet/members/ByReferenceWrapperGenerator.java | 7 ++++--- src/main/java/soot/jimple/spark/solver/PropWorklist.java | 9 ++++----- .../soot/jimple/toolkits/callgraph/ReachableMethods.java | 7 ++++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java b/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java index 9b560203a2e..b4763f94691 100644 --- a/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java +++ b/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java @@ -50,6 +50,7 @@ * @author Marc Miltenberger */ public class ByReferenceWrapperGenerator { + public static final String WRAPPER_FIELD_NAME = "r"; public static final String WRAPPER_CLASS_NAME = "ByReferenceWrappers.Wrapper"; public synchronized static SootClass getWrapperClass(Type t) { @@ -61,7 +62,7 @@ public synchronized static SootClass getWrapperClass(Type t) { } SootClass sc = scene.makeSootClass(name, Modifier.FINAL | Modifier.STATIC); sc.setApplicationClass(); - SootField r = scene.makeSootField("r", RefType.v("System.Object")); + SootField r = scene.makeSootField(WRAPPER_FIELD_NAME, RefType.v("System.Object")); r.setModifiers(Modifier.PUBLIC); sc.addField(r); @@ -120,7 +121,7 @@ public static Unit getUnwrapCall(SootClass wrapperClass, Value argToUnwrap, Valu } public static SootField getWrapperField(SootClass wrapperClass) { - return wrapperClass.getFieldByName("r"); + return wrapperClass.getFieldByName(WRAPPER_FIELD_NAME); } /** @@ -134,7 +135,7 @@ public static SootField getWrapperField(SootClass wrapperClass) { */ public static Unit getUpdateWrappedValueCall(Local wrapped, Local unwrapped) { RefType rt = (RefType) wrapped.getType(); - SootField f = rt.getSootClass().getFieldByName("r"); + SootField f = rt.getSootClass().getFieldByName(WRAPPER_FIELD_NAME); Jimple j = Jimple.v(); return j.newAssignStmt(j.newInstanceFieldRef(wrapped, f.makeRef()), unwrapped); diff --git a/src/main/java/soot/jimple/spark/solver/PropWorklist.java b/src/main/java/soot/jimple/spark/solver/PropWorklist.java index 897c246bb1c..6c2261e81ea 100644 --- a/src/main/java/soot/jimple/spark/solver/PropWorklist.java +++ b/src/main/java/soot/jimple/spark/solver/PropWorklist.java @@ -56,7 +56,7 @@ public class PropWorklist extends Propagator { private static final Logger logger = LoggerFactory.getLogger(PropWorklist.class); - protected final Set varNodeWorkList = new TreeSet(); + protected final TreeSet varNodeWorkList = new TreeSet(); public PropWorklist(PAG pag) { this.pag = pag; @@ -75,10 +75,9 @@ public void propagate() { if (verbose) { logger.debug("Worklist has " + varNodeWorkList.size() + " nodes."); } - while (!varNodeWorkList.isEmpty()) { - VarNode src = varNodeWorkList.iterator().next(); - varNodeWorkList.remove(src); - handleVarNode(src); + VarNode vsrc; + while ((vsrc = varNodeWorkList.pollFirst()) != null) { + handleVarNode(vsrc); } if (verbose) { logger.debug("Now handling field references"); diff --git a/src/main/java/soot/jimple/toolkits/callgraph/ReachableMethods.java b/src/main/java/soot/jimple/toolkits/callgraph/ReachableMethods.java index bbddbafe2c5..6269589ea23 100644 --- a/src/main/java/soot/jimple/toolkits/callgraph/ReachableMethods.java +++ b/src/main/java/soot/jimple/toolkits/callgraph/ReachableMethods.java @@ -25,7 +25,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.Iterator; -import java.util.NoSuchElementException; import java.util.Set; import soot.MethodOrMethodContext; @@ -91,13 +90,15 @@ public void update() { while (unprocessedMethods.hasNext()) { MethodOrMethodContext m = unprocessedMethods.next(); if (m == null) { - continue; + continue; } Iterator targets = cg.edgesOutOf(m); if (filter != null) { targets = filter.wrap(targets); } - addMethods(new Targets(targets)); + if (targets.hasNext()) { + addMethods(new Targets(targets)); + } } } From 0c1265879e886df8881d5a4701473fca2ad94059 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 17:10:23 +0200 Subject: [PATCH 2/8] Handle specialinvokes in OnFlyCallgraphBuilder better --- .../callgraph/OnFlyCallGraphBuilder.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/soot/jimple/toolkits/callgraph/OnFlyCallGraphBuilder.java b/src/main/java/soot/jimple/toolkits/callgraph/OnFlyCallGraphBuilder.java index d333f483ed0..109229f8613 100644 --- a/src/main/java/soot/jimple/toolkits/callgraph/OnFlyCallGraphBuilder.java +++ b/src/main/java/soot/jimple/toolkits/callgraph/OnFlyCallGraphBuilder.java @@ -1,7 +1,5 @@ package soot.jimple.toolkits.callgraph; -import java.lang.reflect.Constructor; - /*- * #%L * Soot - a J*va Optimization Framework @@ -96,7 +94,6 @@ import soot.jimple.StringConstant; import soot.jimple.VirtualInvokeExpr; import soot.jimple.spark.pag.AllocDotField; -import soot.jimple.spark.pag.PAG; import soot.jimple.toolkits.annotation.nullcheck.NullnessAnalysis; import soot.jimple.toolkits.callgraph.ConstantArrayAnalysis.ArrayTypes; import soot.jimple.toolkits.callgraph.VirtualEdgesSummaries.DeferredVirtualEdgeTarget; @@ -810,17 +807,21 @@ protected void findReceivers(SootMethod m, Body b) { if (ie instanceof InstanceInvokeExpr) { InstanceInvokeExpr iie = (InstanceInvokeExpr) ie; Local receiver = (Local) iie.getBase(); - MethodSubSignature subSig = new MethodSubSignature(iie.getMethodRef()); - - VirtualEdge virtualEdge = virtualEdgeSummaries.getVirtualEdgesMatchingSubSig(subSig); - if (virtualEdge != null) { - for (VirtualEdgeTarget t : virtualEdge.targets) { - if (t instanceof InvocationVirtualEdgeTarget) { - processVirtualEdgeSummary(m, s, receiver, (InvocationVirtualEdgeTarget) t, virtualEdge.edgeType); - } else if (t instanceof DeferredVirtualEdgeTarget) { - addVirtualCallSite(s, m, receiver, iie, new MethodSubSignature(iie.getMethodRef()), Kind.GENERIC_FAKE); + if (!(iie instanceof SpecialInvokeExpr)) { + MethodSubSignature subSig = new MethodSubSignature(iie.getMethodRef()); + + VirtualEdge virtualEdge = virtualEdgeSummaries.getVirtualEdgesMatchingSubSig(subSig); + if (virtualEdge != null) { + for (VirtualEdgeTarget t : virtualEdge.targets) { + if (t instanceof InvocationVirtualEdgeTarget) { + processVirtualEdgeSummary(m, s, receiver, (InvocationVirtualEdgeTarget) t, virtualEdge.edgeType); + } else if (t instanceof DeferredVirtualEdgeTarget) { + addVirtualCallSite(s, m, receiver, iie, new MethodSubSignature(iie.getMethodRef()), Kind.GENERIC_FAKE); + } } } + } else { + addEdge(m, s, ie.getMethod(), Kind.SPECIAL); } // if (!hasVirtualEdge || !iie.getMethod().isPhantom()) @@ -970,7 +971,7 @@ private void getImplicitTargets(SootMethod source) { if (!source.isConcrete()) { return; } - if (source.getSubSignature().contains("")) { + if (source.isConstructor()) { handleInit(source, scl); } for (Unit u : source.retrieveActiveBody().getUnits()) { From 014adeee4465e96d9aef9d4601fb6de954121968 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 17:17:01 +0200 Subject: [PATCH 3/8] Fix workflow --- .github/workflows/ci.yml | 6 +++--- pom.xml | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 041415457e8..8c2582a6ddf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,11 +20,11 @@ jobs: - name: Stylecheck if: always() run: | - mvn -B clean checkstyle:check -Dcheckstyle.failOnViolation=true + mvn -B --no-transfer-progress clean checkstyle:check -Dcheckstyle.failOnViolation=true - name: Licensecheck if: always() run: | - mvn -B clean license:check-file-header -Dlicence-check.failOnMissingHeader=true + mvn -B --no-transfer-progress clean license:check-file-header -Dlicence-check.failOnMissingHeader=true BuildAndTest: name: Build and Test with java ${{ matrix.java_version }} @@ -42,7 +42,7 @@ jobs: java-version: ${{ matrix.java_version }} - name: Build and test Java ${{ matrix.java_version }} run: | - mvn -B clean test -PJava${{ matrix.java_version }} + mvn -B --no-transfer-progress clean test -PJava${{ matrix.java_version }} DeployArtifacts: diff --git a/pom.xml b/pom.xml index de5e4216795..d10f269e4a0 100644 --- a/pom.xml +++ b/pom.xml @@ -319,6 +319,10 @@ false false 1 + + --add-opens=java.base/java.lang=ALL-UNNAMED + --add-opens=java.base/java.util=ALL-UNNAMED + From 796fc93f9eb82f0f7a0422f56dea1163c45b3e18 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 17:22:39 +0200 Subject: [PATCH 4/8] pom.xml: apply add-opens more generically --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index d10f269e4a0..dd1f9275483 100644 --- a/pom.xml +++ b/pom.xml @@ -305,6 +305,10 @@ false 1 ${testcase.groups.excluded} + + --add-opens=java.base/java.lang=ALL-UNNAMED + --add-opens=java.base/java.util=ALL-UNNAMED + @@ -319,10 +323,6 @@ false false 1 - - --add-opens=java.base/java.lang=ALL-UNNAMED - --add-opens=java.base/java.util=ALL-UNNAMED - From 3545226467217a65433daed43d6df891e2abe846 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 17:26:21 +0200 Subject: [PATCH 5/8] open regex --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index dd1f9275483..215ee69dc86 100644 --- a/pom.xml +++ b/pom.xml @@ -308,6 +308,7 @@ --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED + --add-opens=java.base/java.util.regex=ALL-UNNAMED From dcac1457c21203539f34908cf55f3a4d3f32acde Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 17:32:17 +0200 Subject: [PATCH 6/8] open stream --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 215ee69dc86..0ce8c526bfb 100644 --- a/pom.xml +++ b/pom.xml @@ -309,6 +309,7 @@ --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.regex=ALL-UNNAMED + --add-opens=java.base/java.util.stream=ALL-UNNAMED From 889b1f939fe341818e19bc9c5af42d3a8f3751de Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 17:36:03 +0200 Subject: [PATCH 7/8] exports: add java.io --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 0ce8c526bfb..d09f8b640d8 100644 --- a/pom.xml +++ b/pom.xml @@ -310,6 +310,7 @@ --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.regex=ALL-UNNAMED --add-opens=java.base/java.util.stream=ALL-UNNAMED + --add-opens=java.base/java.io=ALL-UNNAMED From 9786a19103bf148f222e53b99d62ac2b089aeaf9 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Fri, 20 Sep 2024 17:40:46 +0200 Subject: [PATCH 8/8] open java.net --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index d09f8b640d8..fdd2aa2db66 100644 --- a/pom.xml +++ b/pom.xml @@ -311,6 +311,7 @@ --add-opens=java.base/java.util.regex=ALL-UNNAMED --add-opens=java.base/java.util.stream=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED + --add-opens=java.base/java.net=ALL-UNNAMED