Program: 105604
Project: 105604
Buggy source:
@Override public void handleData(ByteBuffer buf,Link link){
  if (verbose)   System.out.println("String_Node_Str" + this + "String_Node_Str"+ (packetNumber)+ "String_Node_Str"+ buf+ "String_Node_Str");
  if (buf == null)   return;
  if (packetNumber >= bufs.length)   throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ bufs.length+ "String_Node_Str"+ buf+ "String_Node_Str");
  ByteBuffer expectedBuf=bufs[packetNumber];
  if (!Arrays.equals(expectedBuf.toByteArray(),buf.toByteArray())) {
    dump(buf,expectedBuf);
    throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ buf+ "String_Node_Str"+ expectedBuf+ "String_Node_Str");
  }
  Set<String> metadataKeys=expectedBuf.getMetadataKeys();
  if (metadataKeys.size() > 0) {
    for (    String key : metadataKeys) {
      Object expectedValue=expectedBuf.getMetadata(key);
      Object actualValue=buf.getMetadata(key);
      if (actualValue == null)       throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ key+ "String_Node_Str"+ actualValue+ "String_Node_Str"+ expectedValue+ "String_Node_Str");
      if (!expectedValue.equals(actualValue))       throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ key+ "String_Node_Str"+ actualValue+ "String_Node_Str"+ expectedValue+ "String_Node_Str");
    }
  }
  if (verbose)   System.out.println("String_Node_Str" + this + "String_Node_Str");
  packetNumber++;
  buf.unref();
}

Fixed version (ground truth):
@Override public void handleData(ByteBuffer buf,Link link){
  if (verbose)   System.out.println("String_Node_Str" + this + "String_Node_Str"+ (packetNumber)+ "String_Node_Str"+ buf+ "String_Node_Str");
  if (buf == null)   return;
  if (packetNumber >= bufs.length)   throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ bufs.length+ "String_Node_Str"+ buf+ "String_Node_Str");
  ByteBuffer expectedBuf=bufs[packetNumber];
  if (!Arrays.equals(expectedBuf.toByteArray(),buf.toByteArray())) {
    dump(buf,expectedBuf);
    throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ buf+ "String_Node_Str"+ expectedBuf+ "String_Node_Str");
  }
  Set<String> metadataKeys=expectedBuf.getMetadataKeys();
  if (metadataKeys.size() > 0) {
    for (    String key : metadataKeys) {
      Object expectedValue=expectedBuf.getMetadata(key);
      Object actualValue=buf.getMetadata(key);
      if (actualValue == null)       throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ key+ "String_Node_Str"+ "String_Node_Str"+ expectedValue+ "String_Node_Str");
      if (!expectedValue.equals(actualValue))       throw new AssertionError("String_Node_Str" + this + "String_Node_Str"+ packetNumber+ "String_Node_Str"+ key+ "String_Node_Str"+ actualValue+ "String_Node_Str"+ expectedValue+ "String_Node_Str");
    }
  }
  if (verbose)   System.out.println("String_Node_Str" + this + "String_Node_Str");
  packetNumber++;
  buf.unref();
}