Skip to content

Commit 515757f

Browse files
committed
Add missing expected type tags for content providers
(cherry picked from commit 954d8b2)
1 parent 4564524 commit 515757f

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

soot-infoflow-android/src/soot/jimple/infoflow/android/entryPointCreators/AndroidEntryPointCreator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,9 @@ protected SootMethod createDummyMainInternal() {
308308
componentToInfo.getComponentExchangeInfo());
309309
SootMethod m = cpc.createInit();
310310
Local cpLocal = generator.generateLocal(RefType.v(AndroidEntryPointConstants.CONTENTPROVIDERCLASS));
311-
body.getUnits().add(Jimple.v().newAssignStmt(cpLocal, Jimple.v().newStaticInvokeExpr(m.makeRef())));
311+
AssignStmt cp = Jimple.v().newAssignStmt(cpLocal, Jimple.v().newStaticInvokeExpr(m.makeRef()));
312+
cp.addTag(new ExpectedTypeTag(currentClass.getType()));
313+
body.getUnits().add(cp);
312314
localVarsForClasses.put(currentClass, cpLocal);
313315
cpComponents.put(currentClass, cpc);
314316

soot-infoflow-android/src/soot/jimple/infoflow/android/entryPointCreators/components/ContentProviderEntryPointCreator.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
import soot.SootField;
1717
import soot.SootMethod;
1818
import soot.Type;
19+
import soot.Unit;
1920
import soot.UnitPatchingChain;
21+
import soot.jimple.IdentityStmt;
2022
import soot.jimple.Jimple;
23+
import soot.jimple.JimpleBody;
2124
import soot.jimple.NopStmt;
25+
import soot.jimple.ParameterRef;
2226
import soot.jimple.infoflow.android.entryPointCreators.AndroidEntryPointConstants;
2327
import soot.jimple.infoflow.android.entryPointCreators.ComponentExchangeInfo;
2428
import soot.jimple.infoflow.android.manifest.IManifestHandler;
2529
import soot.jimple.infoflow.util.SootUtils;
30+
import soot.tagkit.ExpectedTypeTag;
2631

2732
/**
2833
* Entry point creator for content providers
@@ -101,7 +106,16 @@ public Collection<SootMethod> getAdditionalMethods() {
101106
protected void createEmptyMainMethod() {
102107
super.createEmptyMainMethod();
103108
//the parameter with the content provider local
104-
thisLocal = mainMethod.getActiveBody().getParameterLocal(1);
109+
JimpleBody jb = (JimpleBody) mainMethod.getActiveBody();
110+
thisLocal = jb.getParameterLocal(1);
111+
for (Unit i : jb.getUnits()) {
112+
if (i instanceof IdentityStmt && ((IdentityStmt) i).getRightOp() instanceof ParameterRef) {
113+
ParameterRef paramRef = (ParameterRef) ((IdentityStmt) i).getRightOp();
114+
if (paramRef.getIndex() == 1) {
115+
i.addTag(new ExpectedTypeTag(component.getType()));
116+
}
117+
}
118+
}
105119
}
106120

107121
@Override

0 commit comments

Comments
 (0)