Skip to content

Commit 757b63b

Browse files
committed
Merge branch 'develop' of github.com:secure-software-engineering/FlowDroid into develop
2 parents 9eea9ac + 7d31053 commit 757b63b

File tree

3 files changed

+17
-21
lines changed

3 files changed

+17
-21
lines changed

soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/postProcessor/InfoflowResultPostProcessor.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99

10-
import soot.ArrayType;
11-
import soot.Local;
12-
import soot.Scene;
13-
import soot.SootMethod;
14-
import soot.Value;
10+
import soot.*;
1511
import soot.jimple.InstanceInvokeExpr;
1612
import soot.jimple.ReturnStmt;
1713
import soot.jimple.Stmt;
@@ -32,6 +28,7 @@
3228
import soot.jimple.infoflow.methodSummary.postProcessor.SummaryPathBuilder.SummarySourceInfo;
3329
import soot.jimple.infoflow.methodSummary.taintWrappers.AccessPathFragment;
3430
import soot.jimple.infoflow.methodSummary.util.AliasUtils;
31+
import soot.jimple.infoflow.typing.TypeUtils;
3532
import soot.jimple.infoflow.util.SootMethodRepresentationParser;
3633
import soot.util.MultiMap;
3734

@@ -331,15 +328,21 @@ protected void processAbstractionAtReturn(MethodSummaries flows, AccessPath apAt
331328

332329
// The sink may be a parameter
333330
if (!isInCallee) {
334-
if (!apAtReturn.isLocal() || apAtReturn.getTaintSubFields()
335-
|| apAtReturn.getBaseType() instanceof ArrayType)
336-
for (int i = 0; i < m.getParameterCount(); i++) {
337-
Local p = m.getActiveBody().getParameterLocal(i);
338-
if (apAtReturn.getPlainValue() == p) {
339-
FlowSink sink = sourceSinkFactory.createParameterSink(i, apAtReturn);
340-
addFlow(source, sink, isAlias, flows);
331+
if (apAtReturn.getPlainValue() != null
332+
&& (apAtReturn.getTaintSubFields() || apAtReturn.getFragmentCount() > 0)) {
333+
boolean isString = TypeUtils.isStringType(apAtReturn.getBaseType())
334+
&& !apAtReturn.getCanHaveImmutableAliases();
335+
if (apAtReturn.getBaseType() instanceof ArrayType
336+
|| (apAtReturn.getBaseType() instanceof RefType && !isString)) {
337+
for (int i = 0; i < m.getParameterCount(); i++) {
338+
Local p = m.getActiveBody().getParameterLocal(i);
339+
if (apAtReturn.getPlainValue() == p) {
340+
FlowSink sink = sourceSinkFactory.createParameterSink(i, apAtReturn);
341+
addFlow(source, sink, isAlias, flows);
342+
}
341343
}
342344
}
345+
}
343346
}
344347

345348
// The sink may be a local field

soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/postProcessor/SummaryPathBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ public void clear() {
221221
resultInfos.clear();
222222
visitedAbstractions.clear();
223223
pathCache.clear();
224+
deferredPaths.clear();
225+
sourceReachingScaps.clear();
224226
}
225227

226228
/**

soot-infoflow/src/soot/jimple/infoflow/nativeCallHandler/BackwardNativeCallHandler.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,6 @@ public Set<Abstraction> getTaintedValues(Stmt call, Abstraction source, Value[]
4040
return Collections.singleton(abs);
4141
}
4242
}
43-
if (params[0].equals(taintedValue)) {
44-
if (manager.getTypeUtils().checkCast(source.getAccessPath(), params[2].getType())) {
45-
AccessPath ap = manager.getAccessPathFactory().copyWithNewValue(source.getAccessPath(),
46-
params[2], source.getAccessPath().getBaseType(), false);
47-
Abstraction abs = source.deriveNewAbstraction(ap, call);
48-
abs.setCorrespondingCallSite(call);
49-
return Collections.singleton(abs);
50-
}
51-
}
5243
break;
5344
case SIG_COMPARE_AND_SWAP_OBJECT:
5445
if (params[0].equals(taintedValue)) {

0 commit comments

Comments
 (0)