Skip to content

Commit 1c2ac19

Browse files
committed
Location reporting includes the usages + orignial sources now.
1 parent 0ddc3c5 commit 1c2ac19

File tree

3 files changed

+49
-25
lines changed

3 files changed

+49
-25
lines changed

de.fraunhofer.iem.secucheck.analysis/src/main/java/de/fraunhofer/iem/secucheck/analysis/internal/SingleFlowAnalysis.java

+16-8
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import soot.jimple.internal.JNopStmt;
5050
import soot.tagkit.Host;
5151
import soot.tagkit.PositionTag;
52+
import soot.tagkit.AbstractHost;
5253
import wpds.impl.Weight.NoWeight;
5354

5455
class SingleFlowAnalysis implements Analysis {
@@ -183,21 +184,28 @@ private SameTypedPair<LocationDetails> getDetailsPair(TaintFlowQueryImpl flowQue
183184
LocationDetails startDetails = new LocationDetails();
184185
SootMethod sourceMethodDefinition = Utility.findSourceMethodDefinition(flowQuery, start.stmt().getMethod(),
185186
start.stmt().getUnit().get());
186-
187-
startDetails.setClassName(sourceMethodDefinition.getClass().getName());
188-
startDetails.setLineNumber(sourceMethodDefinition.getJavaSourceStartLineNumber());
189-
startDetails.setColumnNumber(sourceMethodDefinition.getJavaSourceStartColumnNumber());
187+
startDetails.setSourceClassName(sourceMethodDefinition.getDeclaringClass().getName());
190188
startDetails.setMethodSignature(sourceMethodDefinition.getSignature());
189+
190+
AbstractHost sourceHost = (AbstractHost) start.asNode().stmt().getUnit().get();
191+
startDetails.setUsageLineNumber(sourceHost.getJavaSourceStartLineNumber());
192+
startDetails.setUsageColumnNumber(sourceHost.getJavaSourceStartColumnNumber());
193+
startDetails.setUsageMethodSignature(start.stmt().getMethod().getSignature());
194+
startDetails.setUsageClassName(start.stmt().getMethod().getDeclaringClass().getName());
191195
startDetails.setType(LocationType.Source);
192196

193197
LocationDetails endDetails = new LocationDetails();
194198
SootMethod sinkMethodDefinition = Utility.findSinkMethodDefinition(flowQuery, end.stmt().getMethod(),
195199
end.stmt().getUnit().get());
196-
endDetails.setClassName(sinkMethodDefinition.getClass().getName());
197-
endDetails.setLineNumber(sinkMethodDefinition.getJavaSourceStartLineNumber());
198-
endDetails.setColumnNumber(sinkMethodDefinition.getJavaSourceStartColumnNumber());
200+
endDetails.setSourceClassName(sinkMethodDefinition.getDeclaringClass().getName());
199201
endDetails.setMethodSignature(sinkMethodDefinition.getSignature());
200-
endDetails.setType(LocationType.Sink);
202+
203+
AbstractHost sinkHost = (AbstractHost) end.asNode().stmt().getUnit().get();
204+
endDetails.setUsageLineNumber(sinkHost.getJavaSourceStartLineNumber());
205+
endDetails.setUsageColumnNumber(sinkHost.getJavaSourceStartColumnNumber());
206+
endDetails.setUsageMethodSignature(end.stmt().getMethod().getSignature());
207+
endDetails.setUsageClassName(end.stmt().getMethod().getDeclaringClass().getName());
208+
endDetails.setType(LocationType.Sink);
201209

202210
return new SameTypedPair<LocationDetails>(startDetails, endDetails);
203211
}

de.fraunhofer.iem.secucheck.analysis/src/main/java/de/fraunhofer/iem/secucheck/analysis/internal/Utility.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ static SootMethod getSootMethod(Method method) {
4848

4949
static SootMethod findSourceMethodDefinition(TaintFlowQuery partialFlow,
5050
SootMethod method, Stmt actualStatement) {
51-
for (Object object : partialFlow.getFrom()) {
52-
Method sourceMethod = (Method) object;
51+
for (Method sourceMethod : partialFlow.getFrom()) {
5352
String sourceSootSignature = "<" + sourceMethod.getSignature() + ">";
5453
if (method.getSignature().equals(sourceSootSignature)) {
5554
return method;
@@ -63,11 +62,10 @@ static SootMethod findSourceMethodDefinition(TaintFlowQuery partialFlow,
6362

6463
static SootMethod findSinkMethodDefinition(TaintFlowQuery partialFlow,
6564
SootMethod method, Stmt actualStatement) {
66-
for (Object object : partialFlow.getTo()) {
67-
Method sinkMethod = (Method) object;
68-
String sourceSootSignature = "<" + sinkMethod.getSignature() + ">";
65+
for (Method sinkMethod : partialFlow.getTo()) {
66+
String sinkSootSignature = "<" + sinkMethod.getSignature() + ">";
6967
if (actualStatement.containsInvokeExpr() &&
70-
actualStatement.toString().contains(sourceSootSignature)) {
68+
actualStatement.toString().contains(sinkSootSignature)) {
7169
return actualStatement.getInvokeExpr().getMethodRef().tryResolve();
7270
}
7371
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,40 @@
11
package de.fraunhofer.iem.secucheck.analysis.result;
22

33
public class LocationDetails {
4-
private String className;
4+
5+
private String sourceClassName;
6+
private String usageClassName;
7+
58
private String methodSignature;
6-
private int lineNumber;
7-
private int colNumber;
9+
private String usageMethodSignature;
10+
11+
private int usageLineNumber;
12+
private int usageColNumber;
13+
814
private LocationType type;
915

1016
public LocationDetails() { }
1117

12-
public String getClassName() { return className; }
13-
public int getLineNumber() { return lineNumber; }
14-
public int ColumnNumber() { return colNumber; }
18+
public String getSourceClassName() { return sourceClassName; }
19+
public String getUsageClassName() { return usageClassName; }
20+
1521
public String getMethodSignature() { return methodSignature; }
22+
public String getUsageMethodSignature() { return usageMethodSignature; }
23+
1624
public LocationType getType() { return type; }
17-
public void setClassName(String className) { this.className = className; }
18-
public void setLineNumber(int lineNumber) { this.lineNumber = lineNumber; }
19-
public void setMethodSignature(String methodSignature) { this.methodSignature = methodSignature; }
25+
26+
public int getLineNumber() { return usageLineNumber; }
27+
public int ColumnNumber() { return usageColNumber; }
28+
29+
30+
public void setSourceClassName(String sourceClassName) { this.sourceClassName = sourceClassName; }
31+
public void setUsageClassName(String usageClassName) { this.usageClassName = usageClassName; }
32+
33+
public void setMethodSignature(String methodSignature) { this.methodSignature = methodSignature; }
34+
public void setUsageMethodSignature(String usageMethodSignature) { this.usageMethodSignature = usageMethodSignature; }
35+
2036
public void setType(LocationType type) { this.type = type; }
21-
public void setColumnNumber(int colNumber) { this.colNumber = colNumber; }
22-
}
37+
38+
public void setUsageLineNumber(int usageLineNumber) { this.usageLineNumber = usageLineNumber; }
39+
public void setUsageColumnNumber(int usageColNumber) { this.usageColNumber = usageColNumber; }
40+
}

0 commit comments

Comments
 (0)