Program: 13942
Project: 13942
Buggy source:
public void parseDataFile(BufferedReader in,boolean backward) throws IOException {
  Zone zone=null;
  String line;
  while ((line=in.readLine()) != null) {
    String trimmed=line.trim();
    if (trimmed.length() == 0 || trimmed.charAt(0) == '#') {
      continue;
    }
    int index=line.indexOf('#');
    if (index >= 0) {
      line=line.substring(0,index);
    }
    StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
    if (Character.isWhitespace(line.charAt(0)) && st.hasMoreTokens()) {
      if (zone != null) {
        zone.chain(st);
      }
      continue;
    }
 else {
      if (zone != null) {
        iZones.add(zone);
      }
      zone=null;
    }
    if (st.hasMoreTokens()) {
      String token=st.nextToken();
      if (token.equalsIgnoreCase("String_Node_Str")) {
        Rule r=new Rule(st);
        RuleSet rs=iRuleSets.get(r.iName);
        if (rs == null) {
          rs=new RuleSet(r);
          iRuleSets.put(r.iName,rs);
        }
 else {
          rs.addRule(r);
        }
      }
 else       if (token.equalsIgnoreCase("String_Node_Str")) {
        zone=new Zone(st);
      }
 else       if (token.equalsIgnoreCase("String_Node_Str")) {
        String real=st.nextToken();
        String alias=st.nextToken();
        if (backward || alias.equals("String_Node_Str") || alias.startsWith("String_Node_Str")|| alias.equals("String_Node_Str")) {
          iBackLinks.add(real);
          iBackLinks.add(alias);
        }
 else {
          iGoodLinks.add(real);
          iGoodLinks.add(alias);
        }
      }
 else {
        System.out.println("String_Node_Str" + line);
      }
    }
  }
  if (zone != null) {
    iZones.add(zone);
  }
}

Fixed version (ground truth):
public void parseDataFile(BufferedReader in,boolean backward) throws IOException {
  Zone zone=null;
  String line;
  while ((line=in.readLine()) != null) {
    String trimmed=line.trim();
    if (trimmed.length() == 0 || trimmed.charAt(0) == '#') {
      continue;
    }
    int index=line.indexOf('#');
    if (index >= 0) {
      line=line.substring(0,index);
    }
    StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
    if (Character.isWhitespace(line.charAt(0)) && st.hasMoreTokens()) {
      if (zone != null) {
        zone.chain(st);
      }
      continue;
    }
 else {
      if (zone != null) {
        iZones.add(zone);
      }
      zone=null;
    }
    if (st.hasMoreTokens()) {
      String token=st.nextToken();
      if (token.equalsIgnoreCase("String_Node_Str")) {
        Rule r=new Rule(st);
        RuleSet rs=iRuleSets.get(r.iName);
        if (rs == null) {
          rs=new RuleSet(r);
          iRuleSets.put(r.iName,rs);
        }
 else {
          rs.addRule(r);
        }
      }
 else       if (token.equalsIgnoreCase("String_Node_Str")) {
        if (st.countTokens() < 4) {
          throw new IllegalArgumentException("String_Node_Str");
        }
        zone=new Zone(st);
      }
 else       if (token.equalsIgnoreCase("String_Node_Str")) {
        String real=st.nextToken();
        String alias=st.nextToken();
        if (backward || alias.equals("String_Node_Str") || alias.startsWith("String_Node_Str")|| alias.equals("String_Node_Str")) {
          iBackLinks.add(real);
          iBackLinks.add(alias);
        }
 else {
          iGoodLinks.add(real);
          iGoodLinks.add(alias);
        }
      }
 else {
        System.out.println("String_Node_Str" + line);
      }
    }
  }
  if (zone != null) {
    iZones.add(zone);
  }
}