Skip to content

Commit fd43e71

Browse files
authored
Merge pull request #76 from secure-software-engineering/develop
Prepare for release 3.2.3
2 parents ff69898 + 467ee94 commit fd43e71

File tree

23 files changed

+134
-42
lines changed

23 files changed

+134
-42
lines changed

.github/workflows/deploy.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,18 @@ jobs:
2828
SIGN_KEY_PASS: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}
2929
OSSRH_USERNAME: ${{ secrets.SONATYPE_USER }}
3030
OSSRH_PASSWORD: ${{ secrets.SONATYPE_PW }}
31+
32+
synchronize:
33+
runs-on: ubuntu-latest
34+
needs: deployment
35+
steps:
36+
- name: Checkout source code
37+
uses: actions/checkout@v4
38+
with:
39+
fetch-depth: 0
40+
41+
- name: Synchronize master and develop
42+
run: |
43+
gh pr create -B develop -H master -t "Synchronize version in master and develop" -b "Update the version in `develop` from `master`"
44+
env:
45+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

SparseBoomerangCorrectness/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<dependency>
2626
<groupId>com.google.guava</groupId>
2727
<artifactId>guava</artifactId>
28-
<version>33.3.1-jre</version>
28+
<version>33.4.0-jre</version>
2929
</dependency>
3030
</dependencies>
3131

boomerangPDS/src/main/java/boomerang/example/ExampleMain2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ protected Collection<? extends Query> generate(Edge cfgEdge) {
157157
solver.solve((ForwardQuery) query);
158158

159159
// 3. Process forward results
160-
Table<Edge, Val, NoWeight> results = forwardBoomerangResults.asStatementValWeightTable();
160+
Table<Edge, Val, NoWeight> results = forwardBoomerangResults.asEdgeValWeightTable();
161161
for (Edge s : results.rowKeySet()) {
162162
// 4. Filter results based on your use statement, in our case the call of
163163
// System.out.println(n.nested.field)

boomerangPDS/src/main/java/boomerang/guided/DemandDrivenGuidedAnalysis.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public QueryGraph<NoWeight> run(Query query) {
9090
}
9191

9292
Table<Edge, Val, NoWeight> forwardResults =
93-
results.asStatementValWeightTable((ForwardQuery) pop.query);
93+
results.asEdgeValWeightTable((ForwardQuery) pop.query);
9494
// Any ForwardQuery may trigger additional ForwardQuery under its own scope.
9595
triggerNewBackwardQueries(forwardResults, currentQuery, QueryDirection.FORWARD);
9696
} else {
@@ -103,16 +103,14 @@ public QueryGraph<NoWeight> run(Query query) {
103103
(BackwardQuery) pop.query, pop.triggeringNode, pop.parentQuery);
104104
}
105105
Table<Edge, Val, NoWeight> backwardResults =
106-
solver.getBackwardSolvers().get(query).asStatementValWeightTable();
106+
solver.getBackwardSolvers().get(query).asEdgeValWeightTable();
107107

108108
triggerNewBackwardQueries(backwardResults, pop.query, QueryDirection.BACKWARD);
109109
Map<ForwardQuery, Context> allocationSites = results.getAllocationSites();
110110

111111
for (Entry<ForwardQuery, Context> entry : allocationSites.entrySet()) {
112112
triggerNewBackwardQueries(
113-
results.asStatementValWeightTable(entry.getKey()),
114-
entry.getKey(),
115-
QueryDirection.FORWARD);
113+
results.asEdgeValWeightTable(entry.getKey()), entry.getKey(), QueryDirection.FORWARD);
116114
}
117115
}
118116
}

boomerangPDS/src/main/java/boomerang/results/AbstractBoomerangResults.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ public void computeUnmatchedOpeningContext(
5858
new OpeningCallStackExtracter<>(initialState, initialState, context, forwardSolver));
5959
}
6060

61-
public Table<Edge, Val, W> asStatementValWeightTable(ForwardQuery query) {
61+
public Table<Edge, Val, W> asEdgeValWeightTable(ForwardQuery query) {
62+
return queryToSolvers.getOrCreate(query).asEdgeValWeightTable();
63+
}
64+
65+
public Table<Statement, Val, W> asStatementValWeightTable(ForwardQuery query) {
6266
return queryToSolvers.getOrCreate(query).asStatementValWeightTable();
6367
}
6468

boomerangPDS/src/main/java/boomerang/results/ForwardBoomerangResults.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import com.google.common.collect.Maps;
2828
import com.google.common.collect.Sets;
2929
import com.google.common.collect.Table;
30+
import java.util.Collection;
31+
import java.util.HashSet;
3032
import java.util.LinkedList;
3133
import java.util.List;
3234
import java.util.Map;
@@ -95,7 +97,7 @@ public Table<Edge, Val, W> getObjectDestructingStatements() {
9597
if (solver == null) {
9698
return HashBasedTable.create();
9799
}
98-
Table<Edge, Val, W> res = asStatementValWeightTable();
100+
Table<Edge, Val, W> res = asEdgeValWeightTable();
99101
Set<Method> visitedMethods = Sets.newHashSet();
100102
for (Edge s : res.rowKeySet()) {
101103
visitedMethods.add(s.getMethod());
@@ -138,7 +140,11 @@ public void onCallerAdded(Statement callSite, Method m) {
138140
return destructingStatement;
139141
}
140142

141-
public Table<Edge, Val, W> asStatementValWeightTable() {
143+
public Table<Edge, Val, W> asEdgeValWeightTable() {
144+
return asEdgeValWeightTable(query);
145+
}
146+
147+
public Table<Statement, Val, W> asStatementValWeightTable() {
142148
return asStatementValWeightTable(query);
143149
}
144150

@@ -212,6 +218,22 @@ public Map<Edge, DeclaredMethod> getInvokedMethodOnInstance() {
212218
return invokedMethodsOnInstance;
213219
}
214220

221+
/**
222+
* Get all statements that contain an invoke expression belonging to the original seed.
223+
*
224+
* @return the statements that contain invoke expressions belonging to the original seed.
225+
*/
226+
public Collection<Statement> getInvokeStatementsOnInstance() {
227+
Collection<Statement> statements = new HashSet<>();
228+
229+
Map<Edge, DeclaredMethod> callsOnObject = getInvokedMethodOnInstance();
230+
for (Edge edge : callsOnObject.keySet()) {
231+
statements.add(edge.getStart());
232+
}
233+
234+
return statements;
235+
}
236+
215237
public QueryResults getPotentialNullPointerDereferences() {
216238
// FIXME this should be located nullpointer analysis
217239
Set<Node<Edge, Val>> res = Sets.newHashSet();

boomerangPDS/src/main/java/boomerang/solver/AbstractBoomerangSolver.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import boomerang.scene.Type;
2828
import boomerang.scene.Val;
2929
import boomerang.util.RegExAccessPath;
30-
import com.google.common.base.Stopwatch;
3130
import com.google.common.collect.HashBasedTable;
3231
import com.google.common.collect.HashMultimap;
3332
import com.google.common.collect.Lists;
@@ -227,9 +226,9 @@ public void synchedReachable(
227226
});
228227
}
229228

230-
public Table<Edge, Val, W> asStatementValWeightTable() {
229+
public Table<Edge, Val, W> asEdgeValWeightTable() {
231230
final Table<Edge, Val, W> results = HashBasedTable.create();
232-
Stopwatch sw = Stopwatch.createStarted();
231+
233232
WeightedPAutomaton<Edge, INode<Val>, W> callAut = getCallAutomaton();
234233
for (Entry<Transition<Edge, INode<Val>>, W> e :
235234
callAut.getTransitionsToFinalWeights().entrySet()) {
@@ -243,6 +242,25 @@ public Table<Edge, Val, W> asStatementValWeightTable() {
243242
return results;
244243
}
245244

245+
public Table<Statement, Val, W> asStatementValWeightTable() {
246+
Table<Statement, Val, W> results = HashBasedTable.create();
247+
248+
WeightedPAutomaton<Edge, INode<Val>, W> callAut = getCallAutomaton();
249+
for (Entry<Transition<Edge, INode<Val>>, W> e :
250+
callAut.getTransitionsToFinalWeights().entrySet()) {
251+
Transition<Edge, INode<Val>> t = e.getKey();
252+
W w = e.getValue();
253+
254+
if (t.getLabel().equals(new Edge(Statement.epsilon(), Statement.epsilon()))) continue;
255+
if (t.getStart().fact().isLocal()
256+
&& !t.getLabel().getMethod().equals(t.getStart().fact().m())) continue;
257+
258+
results.put(t.getLabel().getStart(), t.getStart().fact(), w);
259+
}
260+
261+
return results;
262+
}
263+
246264
protected void addPotentialUnbalancedFlow(
247265
Method callee, Transition<ControlFlowGraph.Edge, INode<Val>> trans, W weight) {
248266
if (unbalancedDataFlows.put(callee, new UnbalancedDataFlow<>(callee, trans))) {

boomerangPDS/src/test/java/boomerang/guided/CustomFlowFunctionTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import boomerang.scene.jimple.SootCallGraph;
2424
import boomerang.solver.BackwardBoomerangSolver;
2525
import com.google.common.collect.Lists;
26+
import com.google.common.collect.Table;
2627
import java.nio.file.Path;
2728
import java.nio.file.Paths;
2829
import java.util.List;
@@ -107,11 +108,11 @@ public void killOnSystemExitForwardTest() {
107108

108109
System.out.println("Solving query: " + query);
109110
ForwardBoomerangResults<NoWeight> res = solver.solve(query);
110-
System.out.println(res.asStatementValWeightTable());
111+
System.out.println(res.asEdgeValWeightTable());
111112

112113
boolean t =
113114
res.asStatementValWeightTable().cellSet().stream()
114-
.map(c -> c.getRowKey().getTarget())
115+
.map(Table.Cell::getRowKey)
115116
.anyMatch(
116117
statement ->
117118
statement.containsInvokeExpr()

boomerangPDS/src/test/java/test/cases/bugfixes/Repro.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
import boomerang.scene.jimple.*;
1010
import com.google.common.collect.Sets;
1111
import java.util.Arrays;
12+
import java.util.Collection;
1213
import java.util.Collections;
1314
import java.util.Map;
14-
import java.util.Map.Entry;
1515
import java.util.Set;
1616
import org.junit.Test;
1717
import soot.*;
@@ -70,7 +70,7 @@ private static void analyze(String... expectedCallSignatureOnFoo) {
7070
PackManager.v().getPack("wjtp").apply();
7171
}
7272

73-
private static Map<Edge, DeclaredMethod> getMethodsInvokedFromInstanceInStatement(
73+
private static Collection<Statement> getMethodsInvokedFromInstanceInStatement(
7474
Statement queryStatement) {
7575
Val var = new AllocVal(queryStatement.getLeftOp(), queryStatement, queryStatement.getRightOp());
7676
ForwardQuery fwq =
@@ -83,7 +83,7 @@ private static Map<Edge, DeclaredMethod> getMethodsInvokedFromInstanceInStatemen
8383
var);
8484
Boomerang solver = new Boomerang(new SootCallGraph(), SootDataFlowScope.make(Scene.v()), opts);
8585
ForwardBoomerangResults<NoWeight> results = solver.solve(fwq);
86-
return results.getInvokedMethodOnInstance();
86+
return results.getInvokeStatementsOnInstance();
8787
}
8888

8989
static class ReproTransformer extends SceneTransformer {
@@ -115,13 +115,14 @@ protected void internalTransform(String name, Map<String, String> options) {
115115

116116
// This will only show results if set_exclude above gets uncommented
117117
System.out.println("\nFoo invoked methods:");
118-
Set<Entry<Edge, DeclaredMethod>> entries =
119-
getMethodsInvokedFromInstanceInStatement(newFoo).entrySet();
118+
Collection<Statement> statements = getMethodsInvokedFromInstanceInStatement(newFoo);
120119
Set<String> methodCalledOnFoo = Sets.newHashSet();
121-
for (Map.Entry<Edge, DeclaredMethod> e : entries) {
122-
System.out.println("\t" + e.getKey().toString());
123-
System.out.println("\t\t" + e.getValue().toString());
124-
methodCalledOnFoo.add(e.getValue().toString());
120+
for (Statement s : statements) {
121+
System.out.println("\t" + s);
122+
123+
DeclaredMethod calledMethod = s.getInvokeExpr().getMethod();
124+
System.out.println("\t\t" + calledMethod);
125+
methodCalledOnFoo.add(calledMethod.toString());
125126
}
126127

127128
assert methodCalledOnFoo.equals(Sets.newHashSet(expectedCalledMethodsOnFoo));

boomerangScope-WALA/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<artifactId>boomerangScope-WALA</artifactId>
1010

1111
<properties>
12-
<wala.version>1.6.7</wala.version>
12+
<wala.version>1.6.9</wala.version>
1313
</properties>
1414
<dependencies>
1515
<dependency>

0 commit comments

Comments
 (0)