Program: 98806
Project: 98806
Buggy source:
/** 
 * Parses the cleaned Timetable data string into a list of Section objects
 * @param cleanedTimetable the cleaned Timetable data string
 * @return the List of Sections
 */
public List<Section> parseData(String[] cleanedTimetable){
  Section currentSection;
  List<Section> sectionList=new LinkedList<Section>();
  int index=0;
  while ((index=nextCRN(cleanedTimetable,index)) != -1) {
    currentSection=new Section();
    parseCRN(cleanedTimetable,index++,currentSection);
    parseCourse(cleanedTimetable,index++,currentSection);
    parseTitle(cleanedTimetable,index++,currentSection);
    parseType(cleanedTimetable,index++,currentSection);
    parseHrs(cleanedTimetable,index++,currentSection);
    parseCapacity(cleanedTimetable,index++,currentSection);
    parseInstructor(cleanedTimetable,index++,currentSection);
    if (isARR(cleanedTimetable,index)) {
      index++;
      index++;
      parseLocation(cleanedTimetable,index++,currentSection);
      parseExam(cleanedTimetable,index++,currentSection);
    }
 else {
      parseDays(cleanedTimetable,index++,currentSection);
      parseBegin(cleanedTimetable,index++,currentSection);
      parseEnd(cleanedTimetable,index++,currentSection);
      parseLocation(cleanedTimetable,index++,currentSection);
      parseExam(cleanedTimetable,index++,currentSection);
    }
    if (isAdditionalTime(cleanedTimetable,index)) {
      index++;
      AdditionalTime additional=currentSection.addAdditionalTime();
      parseDays(cleanedTimetable,index++,additional);
      parseBegin(cleanedTimetable,index++,additional);
      parseEnd(cleanedTimetable,index++,additional);
      parseLocation(cleanedTimetable,index++,additional);
    }
    sectionList.add(currentSection);
  }
  return sectionList;
}

Fixed version (ground truth):
/** 
 * Parses the cleaned Timetable data string into a list of Section objects
 * @param cleanedTimetable the cleaned Timetable data string
 * @return the List of Sections
 */
public List<Section> parseData(String[] cleanedTimetable){
  Section currentSection;
  List<Section> sectionList=new LinkedList<Section>();
  int index=0;
  int nextCRNIndex;
  while ((index=nextCRN(cleanedTimetable,index)) != -1) {
    currentSection=new Section();
    nextCRNIndex=nextCRN(cleanedTimetable,index + 1);
    parseCRN(cleanedTimetable,index++,currentSection);
    parseCourse(cleanedTimetable,index++,currentSection);
    parseTitle(cleanedTimetable,index++,currentSection);
    parseType(cleanedTimetable,index++,currentSection);
    parseHrs(cleanedTimetable,index++,currentSection);
    parseCapacity(cleanedTimetable,index++,currentSection);
    parseInstructor(cleanedTimetable,index++,currentSection);
    if (isARR(cleanedTimetable,index)) {
      index++;
      index++;
      parseLocation(cleanedTimetable,index++,currentSection);
      parseExam(cleanedTimetable,index++,currentSection);
    }
 else {
      parseDays(cleanedTimetable,index++,currentSection);
      parseBegin(cleanedTimetable,index++,currentSection);
      parseEnd(cleanedTimetable,index++,currentSection);
      parseLocation(cleanedTimetable,index++,currentSection);
      parseExam(cleanedTimetable,index++,currentSection);
    }
    if (isAdditionalTime(cleanedTimetable,index)) {
      index++;
      AdditionalTime additional=currentSection.addAdditionalTime();
      parseDays(cleanedTimetable,index++,additional);
      parseBegin(cleanedTimetable,index++,additional);
      parseEnd(cleanedTimetable,index++,additional);
      parseLocation(cleanedTimetable,index++,additional);
    }
    sectionList.add(currentSection);
    if (nextCRNIndex < index && nextCRNIndex != -1) {
      index=nextCRNIndex;
    }
  }
  return sectionList;
}