Program: 85228
Project: 85228
Buggy source:
protected void internalTransform(String phaseName,Map<String,String> options){
  Scene scene=G.v().soot_Scene();
  if (output)   out.println("String_Node_Str");
  soot.jbco.util.BodyBuilder.retrieveAllNames();
  Chain<SootClass> appClasses=scene.getApplicationClasses();
  for (  SootClass cl : appClasses) {
    for (    SootMethod m : cl.getMethods()) {
      if (!m.hasActiveBody() || m.getName().indexOf("String_Node_Str") >= 0)       continue;
      for (      ValueBox useBox : m.getActiveBody().getUseBoxes()) {
        Value v=useBox.getValue();
        if (v instanceof Constant) {
          Constant c=(Constant)v;
          Type t=c.getType();
          List<Constant> values=typesToValues.get(t);
          if (values == null) {
            values=new ArrayList<Constant>();
            typesToValues.put(t,values);
          }
          boolean found=false;
          Iterator<Constant> vit=values.iterator();
          while (vit.hasNext()) {
            if (vit.next().equals(c)) {
              found=true;
              break;
            }
          }
          if (!found) {
            constants++;
            values.add(c);
          }
        }
      }
    }
  }
  int count=0;
  String name="String_Node_Str";
  Object classes[]=appClasses.toArray();
  Iterator<Type> it=typesToValues.keySet().iterator();
  while (it.hasNext()) {
    Type t=it.next();
    if (t instanceof NullType)     continue;
    Iterator<Constant> cit=typesToValues.get(t).iterator();
    while (cit.hasNext()) {
      Constant c=cit.next();
      name+="String_Node_Str";
      SootClass rand=null;
      do {
        rand=(SootClass)classes[Rand.getInt(classes.length)];
      }
 while (rand.isInterface());
      SootField newf=Scene.v().makeSootField(FieldRenamer.getNewName(),t,Modifier.STATIC ^ Modifier.PUBLIC);
      rand.addField(newf);
      FieldRenamer.sootFieldsRenamed.add(newf);
      FieldRenamer.addOldAndNewName(name,newf.getName());
      constantsToFields.put(c,newf);
      addInitializingValue(rand,newf,c);
      FieldRenamer.addOldAndNewName("String_Node_Str" + count++,newf.getName());
    }
  }
  updatedConstants+=count;
}

Fixed version (ground truth):
protected void internalTransform(String phaseName,Map<String,String> options){
  Scene scene=G.v().soot_Scene();
  if (output)   out.println("String_Node_Str");
  soot.jbco.util.BodyBuilder.retrieveAllNames();
  Chain<SootClass> appClasses=scene.getApplicationClasses();
  for (  SootClass cl : appClasses) {
    for (    SootMethod m : cl.getMethods()) {
      if (!m.hasActiveBody() || m.getName().contains(SootMethod.staticInitializerName))       continue;
      for (      ValueBox useBox : m.getActiveBody().getUseBoxes()) {
        Value v=useBox.getValue();
        if (v instanceof Constant) {
          Constant c=(Constant)v;
          Type t=c.getType();
          List<Constant> values=typesToValues.get(t);
          if (values == null) {
            values=new ArrayList<Constant>();
            typesToValues.put(t,values);
          }
          boolean found=false;
          Iterator<Constant> vit=values.iterator();
          while (vit.hasNext()) {
            if (vit.next().equals(c)) {
              found=true;
              break;
            }
          }
          if (!found) {
            constants++;
            values.add(c);
          }
        }
      }
    }
  }
  int count=0;
  String name="String_Node_Str";
  Object classes[]=appClasses.toArray();
  Iterator<Type> it=typesToValues.keySet().iterator();
  while (it.hasNext()) {
    Type t=it.next();
    if (t instanceof NullType)     continue;
    Iterator<Constant> cit=typesToValues.get(t).iterator();
    while (cit.hasNext()) {
      Constant c=cit.next();
      name+="String_Node_Str";
      SootClass rand=null;
      do {
        rand=(SootClass)classes[Rand.getInt(classes.length)];
      }
 while (rand.isInterface());
      SootField newf=Scene.v().makeSootField(FieldRenamer.getNewName(),t,Modifier.STATIC ^ Modifier.PUBLIC);
      rand.addField(newf);
      FieldRenamer.sootFieldsRenamed.add(newf);
      FieldRenamer.addOldAndNewName(name,newf.getName());
      constantsToFields.put(c,newf);
      addInitializingValue(rand,newf,c);
      FieldRenamer.addOldAndNewName("String_Node_Str" + count++,newf.getName());
    }
  }
  updatedConstants+=count;
}