Program: 37791
Project: 37791
Buggy source:
public static Cell parseCif(File cifFile){
  String line=null;
  double la=0, lb=0, lc=0, a=0, b=0, g=0;
  List<Vect> latVects=null;
  List<Site> sites=new LinkedList<Site>();
  Boolean readingInAtoms=false;
  try {
    BufferedReader r=new BufferedReader(new FileReader(cifFile));
    while ((line=r.readLine()) != null) {
      StringTokenizer t=new StringTokenizer(line);
      if (!t.hasMoreTokens())       continue;
      if (readingInAtoms) {
        String siteStr=t.nextToken();
        String symbol=siteStr.substring(1,2).matches("String_Node_Str") ? siteStr.substring(0,2) : siteStr.substring(0,1);
        double x=Double.parseDouble(t.nextToken());
        double y=Double.parseDouble(t.nextToken());
        double z=Double.parseDouble(t.nextToken());
        sites.add(new Site(Element.getElemFromSymbol(symbol),new Vect(x,y,z,latVects)));
      }
 else {
        String firstWord=t.nextToken();
        if (firstWord.equals("String_Node_Str"))         la=Double.parseDouble(t.nextToken());
 else         if (firstWord.equals("String_Node_Str"))         lb=Double.parseDouble(t.nextToken());
 else         if (firstWord.equals("String_Node_Str"))         lc=Double.parseDouble(t.nextToken());
 else         if (firstWord.equals("String_Node_Str"))         a=Math.toRadians(Double.parseDouble(t.nextToken()));
 else         if (firstWord.equals("String_Node_Str"))         b=Math.toRadians(Double.parseDouble(t.nextToken()));
 else         if (firstWord.equals("String_Node_Str"))         g=Math.toRadians(Double.parseDouble(t.nextToken()));
 else         if (firstWord.equals("String_Node_Str")) {
          readingInAtoms=true;
          latVects=(new Cell(la,lb,lc,a,b,g,null,null)).getLatticeVectors();
        }
      }
    }
  }
 catch (  FileNotFoundException x) {
    System.out.println("String_Node_Str" + cifFile.getAbsolutePath());
    return null;
  }
catch (  IOException y) {
    System.out.println("String_Node_Str" + cifFile.getAbsolutePath());
  }
  if (sites.size() == 0)   return null;
  Cell answer=new Cell(latVects,sites);
  return answer;
}

Fixed version (ground truth):
public static Cell parseCif(File cifFile){
  String line=null;
  double la=0, lb=0, lc=0, a=0, b=0, g=0;
  List<Vect> latVects=null;
  List<Site> sites=new LinkedList<Site>();
  Boolean readingInAtoms=false;
  try {
    BufferedReader r=new BufferedReader(new FileReader(cifFile));
    while ((line=r.readLine()) != null) {
      StringTokenizer t=new StringTokenizer(line);
      if (!t.hasMoreTokens())       continue;
      if (readingInAtoms) {
        String siteStr=t.nextToken();
        String symbol=null;
        if (siteStr.length() < 2)         symbol=siteStr;
 else         symbol=siteStr.substring(1,2).matches("String_Node_Str") ? siteStr.substring(0,2) : siteStr.substring(0,1);
        double x=Double.parseDouble(t.nextToken());
        double y=Double.parseDouble(t.nextToken());
        double z=Double.parseDouble(t.nextToken());
        sites.add(new Site(Element.getElemFromSymbol(symbol),new Vect(x,y,z,latVects)));
      }
 else {
        String firstWord=t.nextToken();
        if (firstWord.equals("String_Node_Str"))         la=Double.parseDouble(t.nextToken());
 else         if (firstWord.equals("String_Node_Str"))         lb=Double.parseDouble(t.nextToken());
 else         if (firstWord.equals("String_Node_Str"))         lc=Double.parseDouble(t.nextToken());
 else         if (firstWord.equals("String_Node_Str"))         a=Math.toRadians(Double.parseDouble(t.nextToken()));
 else         if (firstWord.equals("String_Node_Str"))         b=Math.toRadians(Double.parseDouble(t.nextToken()));
 else         if (firstWord.equals("String_Node_Str"))         g=Math.toRadians(Double.parseDouble(t.nextToken()));
 else         if (firstWord.equals("String_Node_Str")) {
          readingInAtoms=true;
          latVects=(new Cell(la,lb,lc,a,b,g,null,null)).getLatticeVectors();
        }
      }
    }
  }
 catch (  FileNotFoundException x) {
    System.out.println("String_Node_Str" + cifFile.getAbsolutePath());
    return null;
  }
catch (  IOException y) {
    System.out.println("String_Node_Str" + cifFile.getAbsolutePath());
  }
  if (sites.size() == 0)   return null;
  Cell answer=new Cell(latVects,sites);
  return answer;
}