Program: 47958
Project: 47958
Buggy source:
public Tests parse(InputStream is) throws IOException {
  reader=new LineCountingReader(new InputStreamReader(is));
  Tests tests=new Tests();
  Test test=null;
  String line;
  while ((line=reader.readLine()) != null) {
    if (line.startsWith("String_Node_Str")) {
      String testDefinitionLine=reader.readLine();
      int colonPos=testDefinitionLine.indexOf("String_Node_Str");
      String testName=testDefinitionLine.substring(0,colonPos);
      test=new Test(testName);
      tests.entries.add(test);
      test.description=testDefinitionLine.substring(colonPos + 1).trim();
      reader.readLine();
    }
 else     if (line.startsWith("String_Node_Str")) {
      while ((line=reader.readLine()) != null && !line.equals("String_Node_Str")) {
        tests.header.add(line);
      }
    }
 else     if (line.startsWith("String_Node_Str")) {
      while ((line=reader.readLine()) != null && !line.equals("String_Node_Str")) {
        tests.footer.add(line);
      }
    }
 else     if (line.startsWith(INT_START_LINE)) {
      if (test == null) {
        test=new Test("String_Node_Str");
        tests.entries.add(test);
      }
      Interval interval=new Interval(test);
      int durationPos=line.indexOf("String_Node_Str");
      String ts=line.substring(INT_START_LINE.length(),durationPos);
      interval.begin=new DateTime(ts);
      while ((line=reader.readLine()) != null && line.startsWith("String_Node_Str"))       ;
      reader.readLine();
      reader.readLine();
      while ((line=reader.readLine()) != null && line.startsWith("String_Node_Str")) {
        int countColStart=line.indexOf("String_Node_Str",1);
        int averageColStart=line.indexOf("String_Node_Str",countColStart + 1);
        int medianColStart=line.indexOf("String_Node_Str",averageColStart + 1);
        int minColStart=line.indexOf("String_Node_Str",medianColStart + 1);
        int maxColStart=line.indexOf("String_Node_Str",minColStart + 1);
        int allTimeOpsColStart=line.indexOf("String_Node_Str",maxColStart + 1);
        MetricData data=new MetricData();
        String metricName=line.substring(1,countColStart).trim();
        data.count=Integer.parseInt(line.substring(countColStart + 1,averageColStart).trim());
        data.average=Double.parseDouble(line.substring(averageColStart + 1,medianColStart).trim());
        data.median=Double.parseDouble(line.substring(medianColStart + 1,minColStart).trim());
        data.min=Double.parseDouble(line.substring(minColStart + 1,maxColStart).trim());
        data.max=Double.parseDouble(line.substring(maxColStart + 1,allTimeOpsColStart).trim());
        interval.set(metricName,data);
      }
      while ((line=reader.readLine()) != null && line.startsWith("String_Node_Str")) {
        int colonPos=line.indexOf("String_Node_Str");
        String metricName="String_Node_Str" + line.substring(2,colonPos);
        int realPos=line.indexOf("String_Node_Str");
        MetricData data=new MetricData();
        data.average=Double.parseDouble(line.substring(colonPos + 2,realPos).trim());
        interval.set(metricName,data);
      }
      test.add(interval);
    }
  }
  reader.close();
  reader=null;
  return tests;
}

Fixed version (ground truth):
public Tests parse(InputStream is) throws IOException {
  reader=new LineCountingReader(new InputStreamReader(is));
  Tests tests=new Tests();
  Test test=null;
  String line;
  while ((line=reader.readLine()) != null) {
    if (line.startsWith("String_Node_Str")) {
      String testDefinitionLine=reader.readLine();
      int colonPos=testDefinitionLine.indexOf("String_Node_Str");
      String testName=testDefinitionLine.substring(0,colonPos);
      test=new Test(testName);
      tests.entries.add(test);
      test.description=testDefinitionLine.substring(colonPos + 1).trim();
      reader.readLine();
    }
 else     if (line.startsWith("String_Node_Str")) {
      while ((line=reader.readLine()) != null && !line.equals("String_Node_Str")) {
        tests.header.add(line);
      }
    }
 else     if (line.startsWith("String_Node_Str")) {
      System.out.println("String_Node_Str");
      while ((line=reader.readLine()) != null && !line.equals("String_Node_Str")) {
        tests.footer.add(line);
      }
      System.out.println("String_Node_Str" + tests.footer.size());
    }
 else     if (line.startsWith(INT_START_LINE)) {
      if (test == null) {
        test=new Test("String_Node_Str");
        tests.entries.add(test);
      }
      Interval interval=new Interval(test);
      int durationPos=line.indexOf("String_Node_Str");
      String ts=line.substring(INT_START_LINE.length(),durationPos);
      interval.begin=new DateTime(ts);
      while ((line=reader.readLine()) != null && line.startsWith("String_Node_Str"))       ;
      reader.readLine();
      reader.readLine();
      while ((line=reader.readLine()) != null && line.startsWith("String_Node_Str")) {
        int countColStart=line.indexOf("String_Node_Str",1);
        int averageColStart=line.indexOf("String_Node_Str",countColStart + 1);
        int medianColStart=line.indexOf("String_Node_Str",averageColStart + 1);
        int minColStart=line.indexOf("String_Node_Str",medianColStart + 1);
        int maxColStart=line.indexOf("String_Node_Str",minColStart + 1);
        int allTimeOpsColStart=line.indexOf("String_Node_Str",maxColStart + 1);
        MetricData data=new MetricData();
        String metricName=line.substring(1,countColStart).trim();
        data.count=Integer.parseInt(line.substring(countColStart + 1,averageColStart).trim());
        data.average=Double.parseDouble(line.substring(averageColStart + 1,medianColStart).trim());
        data.median=Double.parseDouble(line.substring(medianColStart + 1,minColStart).trim());
        data.min=Double.parseDouble(line.substring(minColStart + 1,maxColStart).trim());
        data.max=Double.parseDouble(line.substring(maxColStart + 1,allTimeOpsColStart).trim());
        interval.set(metricName,data);
      }
      while ((line=reader.readLine()) != null && line.startsWith("String_Node_Str")) {
        int colonPos=line.indexOf("String_Node_Str");
        String metricName="String_Node_Str" + line.substring(2,colonPos);
        int realPos=line.indexOf("String_Node_Str");
        MetricData data=new MetricData();
        data.average=Double.parseDouble(line.substring(colonPos + 2,realPos).trim());
        interval.set(metricName,data);
      }
      reader.unreadLine();
      test.add(interval);
    }
  }
  reader.close();
  reader=null;
  return tests;
}