Program: 94268
Project: 94268
Buggy source:
/** 
 * Read the contents of the packet being sent from the server and handle any events accordingly.
 */
String read() throws IOException {
  String input=super.read();
  if (input == null) {
    return null;
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] events=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < events.length; i++) {
      if (!events[i].trim().equals("String_Node_Str") && events[i].substring(1,3).equals("String_Node_Str")) {
        String[] sub=StringUtils.split(events[i],"String_Node_Str",3);
        String[] split=StringUtils.splitOnSpace(sub[2]);
        changeContactInfo(split);
      }
    }
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    String[] events=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < events.length; i++) {
      if (events[i].startsWith("String_Node_Str")) {
        setContactToOffline(events[i]);
      }
    }
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    String[] events=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < events.length; i++) {
      if (events[i].substring(0,3).equals("String_Node_Str")) {
        String[] sub=StringUtils.splitOnSpace(events[i].substring(4));
        changeContactInfo(sub);
      }
 else       if (events[i].substring(1,3).equals("String_Node_Str")) {
        String[] sub=StringUtils.split(events[i],"String_Node_Str",3);
        String[] split=StringUtils.splitOnSpace(sub[2]);
        changeContactInfo(split);
      }
    }
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    String query=Challenge.createQuery(StringUtils.splitSubstring(input,"String_Node_Str",2));
    write("String_Node_Str",Challenge.PRODUCT_ID + ' ' + query.length()+ "String_Node_Str"+ query,false);
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    processSwitchboardRequest(StringUtils.splitOnSpace(input));
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        response.process(split[i]);
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        processContactData(split,i);
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        String[] subSplit=StringUtils.splitOnSpace(split[i]);
        if (subSplit[2].equals("String_Node_Str")) {
          processContactAdded(subSplit[3].substring(2),subSplit[4].substring(2),subSplit[5].substring(2));
        }
 else         if (subSplit[2].equals("String_Node_Str")) {
          processContactAddedUser(subSplit[3].substring(2));
        }
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        String[] subSplit=StringUtils.splitOnSpace(split[i]);
        if (subSplit[2].equals("String_Node_Str")) {
          processContactRemoved(subSplit[3]);
        }
 else         if (subSplit[2].equals("String_Node_Str")) {
          processContactRemovedUser(subSplit[3]);
        }
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        close();
        break;
      }
    }
  }
  return input;
}

Fixed version (ground truth):
/** 
 * Read the contents of the packet being sent from the server and handle any events accordingly.
 */
String read() throws IOException {
  String input=super.read();
  if (input == null) {
    return null;
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] events=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < events.length; i++) {
      if (!events[i].trim().equals("String_Node_Str") && events[i].substring(1,3).equals("String_Node_Str")) {
        String[] sub=StringUtils.split(events[i],"String_Node_Str",3);
        String[] split=StringUtils.splitOnSpace(sub[2]);
        changeContactInfo(split);
      }
    }
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    String[] events=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < events.length; i++) {
      if (events[i].startsWith("String_Node_Str")) {
        setContactToOffline(events[i]);
      }
    }
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    String[] events=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < events.length; i++) {
      if (events[i].substring(0,3).equals("String_Node_Str")) {
        String[] sub=StringUtils.splitOnSpace(events[i].substring(4));
        changeContactInfo(sub);
      }
 else       if (events[i].substring(1,3).equals("String_Node_Str")) {
        String[] sub=StringUtils.split(events[i],"String_Node_Str",3);
        String[] split=StringUtils.splitOnSpace(sub[2]);
        changeContactInfo(split);
      }
    }
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    String query=MD5HashImpl.getMD5(StringUtils.splitSubstring(input,"String_Node_Str",2));
    write("String_Node_Str",Challenge.PRODUCT_ID + ' ' + query.length()+ "String_Node_Str"+ query,false);
  }
 else   if (input.indexOf("String_Node_Str") != -1) {
    processSwitchboardRequest(StringUtils.splitOnSpace(input));
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        response.process(split[i]);
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        processContactData(split,i);
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        String[] subSplit=StringUtils.splitOnSpace(split[i]);
        if (subSplit[2].equals("String_Node_Str")) {
          processContactAdded(subSplit[3].substring(2),subSplit[4].substring(2),subSplit[5].substring(2));
        }
 else         if (subSplit[2].equals("String_Node_Str")) {
          processContactAddedUser(subSplit[3].substring(2));
        }
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        String[] subSplit=StringUtils.splitOnSpace(split[i]);
        if (subSplit[2].equals("String_Node_Str")) {
          processContactRemoved(subSplit[3]);
        }
 else         if (subSplit[2].equals("String_Node_Str")) {
          processContactRemovedUser(subSplit[3]);
        }
      }
    }
  }
  if (input.indexOf("String_Node_Str") != -1) {
    String[] split=StringUtils.split(input,"String_Node_Str");
    for (int i=0; i < split.length; i++) {
      if (split[i].startsWith("String_Node_Str")) {
        close();
        break;
      }
    }
  }
  return input;
}