Program: 93008
Project: 93008
Buggy source:
private IStatus parse(String data){
  String[] callsAndReturns=data.split("String_Node_Str");
  try {
    for (    String s : callsAndReturns) {
      if (s.length() < 1)       continue;
switch (s.charAt(0)) {
case '<':
        String[] args=s.substring(1,s.length()).split(DELIM);
      int id=Integer.parseInt(args[1]);
    long time=Long.parseLong(args[2]);
  String name=args[0];
if (!encounteredMain && !isFunctionNameClean(name) && name.contains("String_Node_Str")) {
  skippedDirectives=true;
  break;
}
if (startTime < 1) {
startTime=time;
}
endingTimeInNS=time;
name=cleanFunctionName(name);
if (name.equals("String_Node_Str")) encounteredMain=true;
if (firstNode == -1) {
firstNode=id;
}
serialMap.put(id,name);
timeMap.put(id,time);
if (aggregateTimeMap.get(name) == null) {
aggregateTimeMap.put(name,(long)0);
}
if (nameList.indexOf(name) == -1) {
long cumulativeTime=aggregateTimeMap.get(name) - time;
aggregateTimeMap.put(name,cumulativeTime);
shouldGetEndingTimeForID.add(id);
}
if (countMap.get(name) == null) {
countMap.put(name,0);
}
countMap.put(name,countMap.get(name) + 1);
nameList.add(name);
idList.add(id);
if (outNeighbours.get(id) == null) {
outNeighbours.put(id,new ArrayList<Integer>());
}
if (idList.size() > 1) {
int parentID=idList.get(idList.size() - 2);
outNeighbours.get(parentID).add(id);
}
callOrderList.add(id);
lastFunctionCalled=id;
break;
case '>':
args=s.substring(1,s.length()).split(DELIM);
name=args[0];
if (!encounteredMain && !isFunctionNameClean(name) && name.contains("String_Node_Str")) {
skippedDirectives=true;
break;
}
name=cleanFunctionName(name);
int lastOccurance=nameList.lastIndexOf(name);
if (lastOccurance < 0) {
parsingError(Messages.getString("String_Node_Str") + name);
return Status.CANCEL_STATUS;
}
nameList.remove(lastOccurance);
id=idList.remove(lastOccurance);
if (timeMap.get(id) == null) {
parsingError(Messages.getString("String_Node_Str") + name);
return Status.CANCEL_STATUS;
}
endingTimeInNS=Long.parseLong(args[1]);
time=endingTimeInNS - timeMap.get(id);
timeMap.put(id,time);
if (id == firstNode) showTime(id,time);
if (shouldGetEndingTimeForID.contains(id)) {
long cumulativeTime=aggregateTimeMap.get(name) + Long.parseLong(args[1]);
aggregateTimeMap.put(name,cumulativeTime);
}
break;
default :
return Status.CANCEL_STATUS;
}
}
}
 catch (NumberFormatException e) {
SystemTapUIErrorMessages mess=new SystemTapUIErrorMessages(Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str") + Messages.getString("String_Node_Str"));
mess.schedule();
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}

Fixed version (ground truth):
private IStatus parse(String data){
  String[] callsAndReturns=data.split("String_Node_Str");
  try {
    for (    String s : callsAndReturns) {
      if (s.length() < 1)       continue;
switch (s.charAt(0)) {
case '<':
        String[] args=s.substring(1,s.length()).split(DELIM);
      int id=Integer.parseInt(args[1]);
    long time=Long.parseLong(args[2]);
  String name=args[0];
if (!encounteredMain && !isFunctionNameClean(name) && name.contains("String_Node_Str")) {
  skippedDirectives=true;
  break;
}
if (startTime < 1) {
startTime=time;
}
endingTimeInNS=time;
name=cleanFunctionName(name);
if (name.equals("String_Node_Str")) encounteredMain=true;
if (firstNode == -1) {
firstNode=id;
}
serialMap.put(id,name);
timeMap.put(id,time);
if (aggregateTimeMap.get(name) == null) {
aggregateTimeMap.put(name,(long)0);
}
if (nameList.indexOf(name) == -1) {
long cumulativeTime=aggregateTimeMap.get(name) - time;
aggregateTimeMap.put(name,cumulativeTime);
shouldGetEndingTimeForID.add(id);
}
if (countMap.get(name) == null) {
countMap.put(name,0);
}
countMap.put(name,countMap.get(name) + 1);
nameList.add(name);
idList.add(id);
if (outNeighbours.get(id) == null) {
outNeighbours.put(id,new ArrayList<Integer>());
}
if (idList.size() > 1) {
int parentID=idList.get(idList.size() - 2);
outNeighbours.get(parentID).add(id);
}
callOrderList.add(id);
lastFunctionCalled=id;
break;
case '>':
args=s.substring(1,s.length()).split(DELIM);
name=args[0];
if (!encounteredMain && !isFunctionNameClean(name) && name.contains("String_Node_Str")) {
skippedDirectives=true;
break;
}
name=cleanFunctionName(name);
int lastOccurance=nameList.lastIndexOf(name);
if (lastOccurance < 0) {
parsingError(Messages.getString("String_Node_Str") + name);
return Status.CANCEL_STATUS;
}
System.out.println("String_Node_Str" + name);
nameList.remove(lastOccurance);
id=idList.remove(lastOccurance);
if (timeMap.get(id) == null) {
parsingError(Messages.getString("String_Node_Str") + name);
return Status.CANCEL_STATUS;
}
endingTimeInNS=Long.parseLong(args[1]);
time=endingTimeInNS - timeMap.get(id);
timeMap.put(id,time);
if (id == firstNode) showTime(id,time);
if (shouldGetEndingTimeForID.contains(id)) {
long cumulativeTime=aggregateTimeMap.get(name) + Long.parseLong(args[1]);
aggregateTimeMap.put(name,cumulativeTime);
}
break;
default :
return Status.CANCEL_STATUS;
}
}
}
 catch (NumberFormatException e) {
SystemTapUIErrorMessages mess=new SystemTapUIErrorMessages(Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str") + Messages.getString("String_Node_Str"));
mess.schedule();
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}