pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(0))); if (!ptsUri.isEmpty()) { final InstanceKey uriKey = ptsUri.iterator().next(); final OrdinalSet<InstanceKey> points = pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(1))); if (!points.isEmpty()) { final InstanceKey stringKey = points.iterator().next(); final UriAppendString node =
pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(0))); if (!ptsUri.isEmpty()) { final InstanceKey uriKey = ptsUri.iterator().next(); final OrdinalSet<InstanceKey> points = pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(1))); if (!points.isEmpty()) { final InstanceKey stringKey = points.iterator().next();
private Set<CodeElement> getFieldAccessCodeElts(CGNode node, SSAFieldAccessInstruction inst) { if (inst.isStatic()) { return getStaticFieldAccessCodeElts(inst); } Set<CodeElement> elts = HashSetFactory.make(); final FieldReference fieldRef = inst.getDeclaredField(); final IField field = node.getClassHierarchy().resolveField(fieldRef); PointerKey pk = pa.getHeapModel().getPointerKeyForLocal(node, inst.getRef()); final OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(pk); if (pointsToSet.isEmpty()) { InstanceKey ik = new ConcreteTypeKey(field.getDeclaringClass()); elts.add(new FieldElement(ik, fieldRef)); elts.add(new InstanceKeyElement(ik)); } else { for (InstanceKey ik : pointsToSet) { elts.add(new FieldElement(ik, fieldRef)); elts.add(new InstanceKeyElement(ik)); } } return elts; }
private Set<CodeElement> getArrayRefCodeElts(CGNode node, SSAArrayReferenceInstruction inst) { Set<CodeElement> elts = HashSetFactory.make(); final PointerKey pk = pa.getHeapModel().getPointerKeyForLocal(node, inst.getArrayRef()); final OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(pk); if (pointsToSet.isEmpty()) { TypeReference arrayType = TypeReference.findOrCreateArrayOf(inst .getElementType()); InstanceKey ik = new ConcreteTypeKey(pa.getClassHierarchy() .lookupClass(arrayType)); elts.add(new InstanceKeyElement(ik)); } else { for (InstanceKey ik : pointsToSet) { elts.add(new InstanceKeyElement(ik)); } } return elts; }
private void handleUriParse(final NormalAllocationInNode ik, final PointerAnalysis<InstanceKey> pa, final OrdinalSetMapping<InstanceKey> mapping, final Map<InstanceKeySite, Set<InstanceKey>> unresolvedDependencies) { final CGNode allocNode = ik.getNode(); final Context context = allocNode.getContext(); final CGNode caller = (CGNode) context.get(ContextKey.CALLER); if (hasSignature(allocNode, "android.net.Uri.parse(Ljava/lang/String;)Landroid/net/Uri;")) { final CallSiteReference csr = (CallSiteReference) context.get(ContextKey.CALLSITE); final SSAInvokeInstruction invoke = (SSAInvokeInstruction) caller.getIR().getBasicBlocksForCall(csr)[0].getLastInstruction(); final OrdinalSet<InstanceKey> points = pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(0))); if (!points.isEmpty()) { final InstanceKey stringKey = points.iterator().next(); final UriParseString node = new UriParseString( mapping.getMappedIndex(ik), mapping.getMappedIndex(stringKey)); addNode(node); nodeMap.put(ik, node); final Set<InstanceKey> iks = Collections.singleton(stringKey); unresolvedDependencies.put(node, iks); } } }
if (pointsToSet.isEmpty()) { PointerKey pk = pa.getHeapModel().getPointerKeyForInstanceField(ik, field); final OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(pk); if (pointsToSet.isEmpty()) { PointerKey pk = pa.getHeapModel().getPointerKeyForInstanceField(ik, field); final OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(pk); if (pointsToSet.isEmpty() && !analysisContext.getClassHierarchy().isInterface(fieldTypeRef)) {
LocalPointerKey x = new LocalPointerKey(n, i); OrdinalSet<InstanceKey> s = android.snd.getPointsToSet(x); if (s != null && !s.isEmpty()) { System.err.println(i + ": " + s);
OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(pk); if (pointsToSet.isEmpty()) { IClassHierarchy cha = im.getClassHierarchy(); if (null == cha.lookupClass(typeRef)) {
final OrdinalSet<InstanceKey> pointsToSet = pa.getPointsToSet(pk); if (pointsToSet.isEmpty()) { TypeReference typeRef = node.getMethod().getParameterType(i); IClass clazz = node.getMethod().getClassHierarchy().lookupClass(typeRef);