@Override public PointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { if (valueNumber <= 0) { throw new IllegalArgumentException("illegal value number: " + valueNumber + " in " + node); } return new LocalPointerKey(node, valueNumber); }
@Override public PointerKey getPointerKeyForLocal(CGNode node, int valueNumber) { if (valueNumber <= 0) { throw new IllegalArgumentException("illegal value number: " + valueNumber + " in " + node); } return new LocalPointerKey(node, valueNumber); }
private List<SSAInstruction> findInstructions() { List<SSAInstruction> instructions = new ArrayList<>(); if (node != null) { for (SSAInstruction inst: node.getIR().getInstructions()) { if (inst instanceof SSAInvokeInstruction) { if (localPointerKeys.contains(new LocalPointerKey(node,inst.getUse(0)))) { instructions.add(inst); } } } } return instructions; }
final LocalPointerKey lpk = new LocalPointerKey(node, iNext.getUse(1)); final LocalPointerKey lpk = new LocalPointerKey(node, iNext.getUse(1));
(SSAInvokeInstruction) caller.getIR().getBasicBlocksForCall(csr)[0].getLastInstruction(); final OrdinalSet<InstanceKey> ptsUri = pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(0))); pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(1)));
(SSAInvokeInstruction) caller.getIR().getBasicBlocksForCall(csr)[0].getLastInstruction(); final OrdinalSet<InstanceKey> ptsUri = pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(0))); pa.getPointsToSet(new LocalPointerKey(caller, invoke.getUse(1))); pa.getPointsToSet(new LocalPointerKey(caller, invoke.getReturnValue(0)));
SSAInstruction call = caller.getIR().getInstructions()[caller.getIR().getCallInstructionIndices(site).intIterator().next()]; if (call.getNumberOfUses() > 1) { LocalPointerKey fileNameV = new LocalPointerKey(caller, call.getUse(1)); OrdinalSet<InstanceKey> ptrs = builder.getPointerAnalysis().getPointsToSet(fileNameV); for(InstanceKey k : ptrs) {
SSAInstruction call = caller.getIR().getInstructions()[caller.getIR().getCallInstructionIndices(site).intIterator().next()]; if (call.getNumberOfUses() > 1) { LocalPointerKey fileNameV = new LocalPointerKey(caller, call.getUse(1)); OrdinalSet<InstanceKey> ptrs = builder.getPointerAnalysis().getPointsToSet(fileNameV); for(InstanceKey k : ptrs) {
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); } } }
LocalPointerKey lpkey = new LocalPointerKey(node, invInst.getUse(argNum)); for (InstanceKey ik : pa.getPointsToSet(lpkey)) {
System.err.println("exceptions: " + android.snd.getPointsToSet(new ExceptionReturnValueKey(n))); for(int i = 1; i < n.getIR().getSymbolTable().getMaxValueNumber(); i++) { LocalPointerKey x = new LocalPointerKey(n, i); OrdinalSet<InstanceKey> s = android.snd.getPointsToSet(x); if (s != null && !s.isEmpty()) {
@Test public void testInnerClassSuper() throws IllegalArgumentException, CancelException, IOException { Pair<CallGraph, PointerAnalysis<? extends InstanceKey>> x = runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), new ArrayList<IRAssertion>(), true, null); // can't do an IRAssertion() -- we need the pointer analysis CallGraph cg = x.fst; PointerAnalysis<? extends InstanceKey> pa = x.snd; Iterator<CGNode> iter = cg.iterator(); while ( iter.hasNext() ) { CGNode n = iter.next(); if ( n.getMethod().getSignature().equals("LInnerClassSuper$SuperOuter.test()V") ) { // find enclosing instruction for ( SSAInstruction instr: n.getIR().getInstructions() ) { if ( instr instanceof EnclosingObjectReference ) { StringBuilder allIksBuilder = new StringBuilder(); for (InstanceKey ik: pa.getPointsToSet(new LocalPointerKey(n,instr.getDef()))) allIksBuilder.append(ik.getConcreteType().getName()).append(','); final String allIks = allIksBuilder.toString(); Assert.assertTrue("assertion failed: expecting ik \"LSub,\" in method, got \"" + allIks + "\"\n", allIks.equals("LSub,")); break; } } } } }
if ( instr instanceof EnclosingObjectReference ) { StringBuilder allIksBuilder = new StringBuilder(); for (InstanceKey ik: pa.getPointsToSet(new LocalPointerKey(n,instr.getDef()))) allIksBuilder.append(ik.getConcreteType().getName()).append(',');
final SSAInstruction inst = realBlock.getLastInstruction(); if (null != inst && inst instanceof SSAReturnInstruction) { PointerKey pk = new LocalPointerKey(node, inst.getUse(0)); for (InstanceKey ik : pa.getPointsToSet(pk)) {
for (InstanceKey ik : pa.getPointsToSet(new LocalPointerKey( node, node.getIR().getParameter(newArgNum)))) { for (DomainElement de : domain