Program: 85230
Project: 85230
Buggy source:
protected void internalTransform(String phaseName,Map<String,String> options){
  if (output)   out.println("String_Node_Str");
  soot.jbco.util.BodyBuilder.retrieveAllBodies();
  soot.jbco.util.BodyBuilder.retrieveAllNames();
  Scene scene=G.v().soot_Scene();
  scene.releaseActiveHierarchy();
  hierarchy=scene.getActiveHierarchy();
  for (  SootClass c : scene.getApplicationClasses()) {
    Vector<String> fields=new Vector<String>();
    Iterator<SootField> fIt=c.getFields().iterator();
    while (fIt.hasNext()) {
      fields.add(fIt.next().getName());
    }
    final List<SootMethod> methods=new ArrayList<>(c.getMethods());
    for (    SootMethod m : methods) {
      String subSig=m.getSubSignature();
      if (!allowsRename(c,m))       continue;
      boolean rename=true;
      for (      SootClass _c : hierarchy.getSuperclassesOfIncluding(c.getSuperclass())) {
        if (_c.declaresMethod(subSig) && hierarchy.isVisible(c,_c.getMethod(subSig)) && _c.isLibraryClass()) {
          if (output)           out.println("String_Node_Str" + _c.getName() + "String_Node_Str"+ subSig+ "String_Node_Str"+ c.getName());
          rename=false;
          break;
        }
      }
      if (rename) {
        String newName=oldToNewMethodNames.get(m.getName());
        if (newName == null) {
          if (fields.size() > 0) {
            int rand=Rand.getInt(fields.size());
            newName=fields.remove(rand);
            if (oldToNewMethodNames.containsValue(newName))             newName=getNewName();
          }
 else {
            newName=getNewName();
          }
        }
        oldToNewMethodNames.put(m.getName(),newName);
        if (output)         out.println("String_Node_Str" + m.getSignature() + "String_Node_Str"+ newName);
        m.setName(newName);
      }
    }
  }
  for (  SootClass c : scene.getApplicationClasses()) {
    final List<SootMethod> methods=new ArrayList<>(c.getMethods());
    for (    SootMethod m : methods) {
      if (!m.isConcrete() || m.getDeclaringClass().isLibraryClass())       continue;
      Body aBody=null;
      try {
        aBody=m.getActiveBody();
      }
 catch (      Exception exc) {
        continue;
      }
      Iterator<Unit> uIt=aBody.getUnits().iterator();
      while (uIt.hasNext()) {
        Iterator<ValueBox> ubIt=uIt.next().getUseBoxes().iterator();
        while (ubIt.hasNext()) {
          Value v=ubIt.next().getValue();
          if (!(v instanceof InvokeExpr))           continue;
          InvokeExpr ie=(InvokeExpr)v;
          try {
            ie.getMethod();
            continue;
          }
 catch (          Exception e) {
          }
          SootMethodRef r=ie.getMethodRef();
          String newName=oldToNewMethodNames.get(r.name());
          if (newName == null)           continue;
          r=scene.makeMethodRef(r.declaringClass(),newName,r.parameterTypes(),r.returnType(),r.isStatic());
          ie.setMethodRef(r);
        }
      }
    }
  }
  scene.releaseActiveHierarchy();
  scene.getActiveHierarchy();
  scene.setFastHierarchy(new FastHierarchy());
}

Fixed version (ground truth):
protected void internalTransform(String phaseName,Map<String,String> options){
  if (output)   out.println("String_Node_Str");
  BodyBuilder.retrieveAllBodies();
  BodyBuilder.retrieveAllNames();
  Scene scene=G.v().soot_Scene();
  scene.releaseActiveHierarchy();
  hierarchy=scene.getActiveHierarchy();
  for (  SootClass c : scene.getApplicationClasses()) {
    Vector<String> fields=new Vector<String>();
    Iterator<SootField> fIt=c.getFields().iterator();
    while (fIt.hasNext()) {
      fields.add(fIt.next().getName());
    }
    final List<SootMethod> methods=new ArrayList<>(c.getMethods());
    for (    SootMethod m : methods) {
      String subSig=m.getSubSignature();
      if (!allowsRename(c,m))       continue;
      boolean rename=true;
      for (      SootClass _c : hierarchy.getSuperclassesOfIncluding(c.getSuperclass())) {
        if (_c.declaresMethod(subSig) && hierarchy.isVisible(c,_c.getMethod(subSig)) && _c.isLibraryClass()) {
          if (output)           out.println("String_Node_Str" + _c.getName() + "String_Node_Str"+ subSig+ "String_Node_Str"+ c.getName());
          rename=false;
          break;
        }
      }
      if (rename) {
        String newName=oldToNewMethodNames.get(m.getName());
        if (newName == null) {
          if (fields.size() > 0) {
            int rand=Rand.getInt(fields.size());
            newName=fields.remove(rand);
            if (oldToNewMethodNames.containsValue(newName))             newName=getNewName();
          }
 else {
            newName=getNewName();
          }
        }
        oldToNewMethodNames.put(m.getName(),newName);
        if (output)         out.println("String_Node_Str" + m.getSignature() + "String_Node_Str"+ newName);
        m.setName(newName);
      }
    }
  }
  for (  SootClass c : scene.getApplicationClasses()) {
    final List<SootMethod> methods=new ArrayList<>(c.getMethods());
    for (    SootMethod m : methods) {
      if (!m.isConcrete() || m.getDeclaringClass().isLibraryClass())       continue;
      Body aBody=null;
      try {
        aBody=m.getActiveBody();
      }
 catch (      Exception exc) {
        continue;
      }
      Iterator<Unit> uIt=aBody.getUnits().iterator();
      while (uIt.hasNext()) {
        Iterator<ValueBox> ubIt=uIt.next().getUseBoxes().iterator();
        while (ubIt.hasNext()) {
          Value v=ubIt.next().getValue();
          if (!(v instanceof InvokeExpr))           continue;
          InvokeExpr ie=(InvokeExpr)v;
          SootMethodRef methodRef=ie.getMethodRef();
          if (methodRef.declaringClass().getMethodUnsafe(methodRef.getSubSignature()) != null) {
            continue;
          }
          String newName=oldToNewMethodNames.get(methodRef.name());
          if (newName == null)           continue;
          methodRef=scene.makeMethodRef(methodRef.declaringClass(),newName,methodRef.parameterTypes(),methodRef.returnType(),methodRef.isStatic());
          ie.setMethodRef(methodRef);
        }
      }
    }
  }
  scene.releaseActiveHierarchy();
  scene.getActiveHierarchy();
  scene.setFastHierarchy(new FastHierarchy());
}