Program: 88707
Project: 88707
Buggy source:
private void getImplicitTargets(SootMethod source){
  List stringConstants=(List)methodToStringConstants.get(source);
  if (stringConstants == null)   methodToStringConstants.put(source,stringConstants=new ArrayList());
  final SootClass scl=source.getDeclaringClass();
  if (source.isNative() || source.isPhantom())   return;
  if (source.getSubSignature().indexOf("String_Node_Str") >= 0) {
    handleInit(source,scl);
  }
  Body b=source.retrieveActiveBody();
  boolean warnedAlready=false;
  for (Iterator sIt=b.getUnits().iterator(); sIt.hasNext(); ) {
    final Stmt s=(Stmt)sIt.next();
    if (s.containsInvokeExpr()) {
      InvokeExpr ie=(InvokeExpr)s.getInvokeExpr();
      if (ie.getMethod().getSignature().equals("String_Node_Str")) {
        if (!warnedAlready) {
          if (options.verbose()) {
            G.v().out.println("String_Node_Str" + "String_Node_Str" + source + "String_Node_Str");
          }
          warnedAlready=true;
        }
      }
      if (ie.getMethod().getSignature().equals("String_Node_Str")) {
        if (options.safe_newinstance()) {
          for (Iterator tgtIt=EntryPoints.v().inits().iterator(); tgtIt.hasNext(); ) {
            final SootMethod tgt=(SootMethod)tgtIt.next();
            cicg.addEdge(new Edge(source,s,tgt,Edge.NEWINSTANCE));
          }
        }
 else {
          if (options.verbose()) {
            G.v().out.println("String_Node_Str" + source + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
          }
        }
      }
      if (ie instanceof StaticInvokeExpr) {
        addEdge(source,s,ie.getMethod().getDeclaringClass(),sigClinit,Edge.CLINIT);
      }
      if (ie.getMethod().getNumberedSubSignature() == sigForName) {
        Value className=ie.getArg(0);
        if (className instanceof StringConstant) {
          String cls=((StringConstant)className).value;
          constantForName(cls,source,s);
        }
 else {
          Local constant=(Local)className;
          if (options.safe_forname()) {
            for (Iterator tgtIt=EntryPoints.v().clinits().iterator(); tgtIt.hasNext(); ) {
              final SootMethod tgt=(SootMethod)tgtIt.next();
              cicg.addEdge(new Edge(source,s,tgt,Edge.CLINIT));
            }
          }
 else {
            VirtualCallSite site=new VirtualCallSite(s,source);
            List sites=(List)stringConstToSites.get(constant);
            if (sites == null) {
              stringConstToSites.put(constant,sites=new ArrayList());
              stringConstants.add(constant);
            }
            sites.add(site);
          }
        }
      }
    }
    if (s.containsFieldRef()) {
      FieldRef fr=(FieldRef)s.getFieldRef();
      if (fr instanceof StaticFieldRef) {
        SootClass cl=fr.getField().getDeclaringClass();
        addEdge(source,s,cl,sigClinit,Edge.CLINIT);
      }
    }
    if (s instanceof AssignStmt) {
      Value rhs=((AssignStmt)s).getRightOp();
      if (rhs instanceof NewExpr) {
        NewExpr r=(NewExpr)rhs;
        addEdge(source,s,r.getBaseType().getSootClass(),sigClinit,Edge.CLINIT);
      }
 else       if (rhs instanceof NewArrayExpr || rhs instanceof NewMultiArrayExpr) {
        Type t=rhs.getType();
        if (t instanceof ArrayType)         t=((ArrayType)t).baseType;
        if (t instanceof RefType) {
          addEdge(source,s,((RefType)t).getSootClass(),sigClinit,Edge.CLINIT);
        }
      }
    }
  }
}

Fixed version (ground truth):
private void getImplicitTargets(SootMethod source){
  List stringConstants=(List)methodToStringConstants.get(source);
  if (stringConstants == null)   methodToStringConstants.put(source,stringConstants=new ArrayList());
  final SootClass scl=source.getDeclaringClass();
  if (source.isNative() || source.isPhantom())   return;
  if (source.getSubSignature().indexOf("String_Node_Str") >= 0) {
    handleInit(source,scl);
  }
  Body b=source.retrieveActiveBody();
  boolean warnedAlready=false;
  for (Iterator sIt=b.getUnits().iterator(); sIt.hasNext(); ) {
    final Stmt s=(Stmt)sIt.next();
    if (s.containsInvokeExpr()) {
      InvokeExpr ie=(InvokeExpr)s.getInvokeExpr();
      if (ie.getMethod().getSignature().equals("String_Node_Str")) {
        if (!warnedAlready) {
          if (options.verbose()) {
            G.v().out.println("String_Node_Str" + "String_Node_Str" + source + "String_Node_Str");
          }
          warnedAlready=true;
        }
      }
      if (ie.getMethod().getSignature().equals("String_Node_Str")) {
        if (options.safe_newinstance()) {
          for (Iterator tgtIt=EntryPoints.v().inits().iterator(); tgtIt.hasNext(); ) {
            final SootMethod tgt=(SootMethod)tgtIt.next();
            cicg.addEdge(new Edge(source,s,tgt,Edge.NEWINSTANCE));
          }
        }
 else {
          if (options.verbose()) {
            G.v().out.println("String_Node_Str" + source + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
          }
        }
      }
      if (ie instanceof StaticInvokeExpr) {
        SootClass cl=ie.getMethod().getDeclaringClass();
        for (Iterator clinitIt=EntryPoints.v().clinitsOf(cl).iterator(); clinitIt.hasNext(); ) {
          final SootMethod clinit=(SootMethod)clinitIt.next();
          cicg.addEdge(new Edge(source,s,clinit,Edge.CLINIT));
        }
      }
      if (ie.getMethod().getNumberedSubSignature() == sigForName) {
        Value className=ie.getArg(0);
        if (className instanceof StringConstant) {
          String cls=((StringConstant)className).value;
          constantForName(cls,source,s);
        }
 else {
          Local constant=(Local)className;
          if (options.safe_forname()) {
            for (Iterator tgtIt=EntryPoints.v().clinits().iterator(); tgtIt.hasNext(); ) {
              final SootMethod tgt=(SootMethod)tgtIt.next();
              cicg.addEdge(new Edge(source,s,tgt,Edge.CLINIT));
            }
          }
 else {
            VirtualCallSite site=new VirtualCallSite(s,source);
            List sites=(List)stringConstToSites.get(constant);
            if (sites == null) {
              stringConstToSites.put(constant,sites=new ArrayList());
              stringConstants.add(constant);
            }
            sites.add(site);
          }
        }
      }
    }
    if (s.containsFieldRef()) {
      FieldRef fr=(FieldRef)s.getFieldRef();
      if (fr instanceof StaticFieldRef) {
        SootClass cl=fr.getField().getDeclaringClass();
        for (Iterator clinitIt=EntryPoints.v().clinitsOf(cl).iterator(); clinitIt.hasNext(); ) {
          final SootMethod clinit=(SootMethod)clinitIt.next();
          cicg.addEdge(new Edge(source,s,clinit,Edge.CLINIT));
        }
      }
    }
    if (s instanceof AssignStmt) {
      Value rhs=((AssignStmt)s).getRightOp();
      if (rhs instanceof NewExpr) {
        NewExpr r=(NewExpr)rhs;
        SootClass cl=r.getBaseType().getSootClass();
        for (Iterator clinitIt=EntryPoints.v().clinitsOf(cl).iterator(); clinitIt.hasNext(); ) {
          final SootMethod clinit=(SootMethod)clinitIt.next();
          cicg.addEdge(new Edge(source,s,clinit,Edge.CLINIT));
        }
      }
 else       if (rhs instanceof NewArrayExpr || rhs instanceof NewMultiArrayExpr) {
        Type t=rhs.getType();
        if (t instanceof ArrayType)         t=((ArrayType)t).baseType;
        if (t instanceof RefType) {
          SootClass cl=((RefType)t).getSootClass();
          for (Iterator clinitIt=EntryPoints.v().clinitsOf(cl).iterator(); clinitIt.hasNext(); ) {
            final SootMethod clinit=(SootMethod)clinitIt.next();
            cicg.addEdge(new Edge(source,s,clinit,Edge.CLINIT));
          }
        }
      }
    }
  }
}