Program: 46753
Project: 46753
Buggy source:
private void builtGraph(String hash,int depth){
  onStart(hash,depth);
  if (depth == 0)   return;
synchronized (alreadyScannedID) {
    if (alreadyScannedID.contains(hash))     return;
  }
  try {
    String s=urlprefix + hash;
    Source source=new Source(new URL(s));
    String renderedText=source.getRenderer().toString();
    String[] lines=renderedText.split("String_Node_Str");
    int i=0;
    for (; i < lines.length; i++) {
      if (lines[i].startsWith("String_Node_Str")) {
        break;
      }
    }
    String id=getHex(lines[i]);
    i+=2;
    String name=lines[i].substring(4).trim();
    i++;
    System.out.println("String_Node_Str");
    System.out.println("String_Node_Str" + name + "String_Node_Str"+ id);
synchronized (alreadyScannedID) {
      alreadyScannedID.add(id);
    }
    Person to=new Person(name,id);
    java.util.List<Thread> listT=new LinkedList<Thread>();
    for (; i < lines.length; i+=2) {
      String signHex=getHex(lines[i]);
      String signName=getName(lines[i]).trim();
      Person from=new Person(signName,signHex);
      if (from.selfsigned())       continue;
      if (signHex == null)       continue;
      System.out.println("String_Node_Str" + signName + "String_Node_Str"+ signHex);
synchronized (graph) {
        graph.addEdge(new Trust(),from,to);
      }
      search(signHex,depth - 1);
    }
    for (    Thread thread : listT) {
      thread.join();
    }
  }
 catch (  IOException e) {
    e.printStackTrace();
  }
catch (  InterruptedException e) {
    e.printStackTrace();
  }
 finally {
    onFinish(hash);
  }
}

Fixed version (ground truth):
private void builtGraph(String hash,int depth){
  onStart(hash,depth);
  if (depth == 0)   return;
synchronized (alreadyScannedID) {
    if (alreadyScannedID.contains(hash))     return;
  }
  try {
    String s=urlprefix + hash;
    Source source=new Source(new URL(s));
    String renderedText=source.getRenderer().toString();
    String[] lines=renderedText.split("String_Node_Str");
    int i=0;
    for (; i < lines.length; i++) {
      if (lines[i].startsWith("String_Node_Str")) {
        break;
      }
    }
    String id=getHex(lines[i]);
    i+=2;
    String name=lines[i].substring(4).trim();
    i++;
    System.out.println(renderedText);
    System.out.println("String_Node_Str");
    System.out.println("String_Node_Str" + name + "String_Node_Str"+ id);
synchronized (alreadyScannedID) {
      alreadyScannedID.add(id);
    }
    Person to=new Person(name,id);
    java.util.List<Thread> listT=new LinkedList<Thread>();
    for (; i < lines.length; i+=2) {
      String signHex=getHex(lines[i]);
      String signName=getName(lines[i]).trim();
      Person from=new Person(signName,signHex);
      if (from.selfsigned())       continue;
      if (signHex == null)       continue;
      System.out.println("String_Node_Str" + signName + "String_Node_Str"+ signHex);
synchronized (graph) {
        graph.addEdge(new Trust(),from,to);
      }
      search(signHex,depth - 1);
    }
    for (    Thread thread : listT) {
      thread.join();
    }
  }
 catch (  IOException e) {
    e.printStackTrace();
  }
catch (  InterruptedException e) {
    e.printStackTrace();
  }
 finally {
    onFinish(hash);
  }
}