Program: 109982
Project: 109982
Buggy source:
public static HashMap<String,ArrayList<CSVEntry>> lex(String filename) throws FileNotFoundException, IOException, RuntimeException {
  BufferedReader br=new BufferedReader(new FileReader(filename));
  HashMap<String,ArrayList<CSVEntry>> entries=null;
  String line="String_Node_Str";
  int lineno=0;
  while ((line=br.readLine()) != null) {
    lineno+=1;
    if (headers == null) {
      headers=getHeaders(line);
      entries=new HashMap<String,ArrayList<CSVEntry>>(headers.length);
      for (int i=0; i < headers.length; i++)       entries.put(headers[i],new ArrayList<CSVEntry>());
    }
 else {
      while (inQuot(line)) {
        String newLine=br.readLine();
        lineno+=1;
        if (newLine != null)         line=line + newLine;
 else         throw new MalformedQuotationException(line);
      }
      String entry=null;
      String restOfLine=line;
      for (int i=0; i < headers.length; i++) {
        if (i == headers.length - 1) {
          if (inQuot(restOfLine))           throw new MalformedQuotationException(restOfLine);
          entries.get(headers[i]).add(new CSVEntry(restOfLine,lineno,i));
        }
 else {
          int a=restOfLine.indexOf(Character.toString((char)seperator));
          int b=1;
          if (a == -1) {
            out.println(String.format("String_Node_Str",Character.toString((char)seperator),String.format("String_Node_Str",seperator),lineno,line));
          }
          entry=restOfLine.substring(0,a + b);
          restOfLine=restOfLine.substring(entry.length());
          while (inQuot(entry)) {
            if (restOfLine.equals("String_Node_Str"))             throw new MalformedQuotationException(entry);
            a=restOfLine.indexOf(Character.toString((char)seperator));
            entry=entry + restOfLine.substring(0,a + b);
            restOfLine=restOfLine.substring(a + b);
          }
          entries.get(headers[i]).add(new CSVEntry(entry,lineno,i));
        }
      }
    }
  }
  out.println(filename + "String_Node_Str" + (lineno - 1)+ "String_Node_Str"+ Character.toString((char)seperator)+ "String_Node_Str");
  clean(entries);
  if (!entries.keySet().contains("String_Node_Str"))   throw new CSVColumnException("String_Node_Str");
  if (!entries.keySet().contains("String_Node_Str"))   throw new CSVColumnException("String_Node_Str");
  return entries;
}

Fixed version (ground truth):
public static HashMap<String,ArrayList<CSVEntry>> lex(String filename) throws FileNotFoundException, IOException, RuntimeException {
  BufferedReader br=new BufferedReader(new FileReader(filename));
  HashMap<String,ArrayList<CSVEntry>> entries=null;
  String line="String_Node_Str";
  int lineno=0;
  resetHeaders();
  while ((line=br.readLine()) != null) {
    lineno+=1;
    if (headers == null) {
      headers=getHeaders(line);
      entries=new HashMap<String,ArrayList<CSVEntry>>(headers.length);
      for (int i=0; i < headers.length; i++)       entries.put(headers[i],new ArrayList<CSVEntry>());
    }
 else {
      while (inQuot(line)) {
        String newLine=br.readLine();
        lineno+=1;
        if (newLine != null)         line=line + newLine;
 else         throw new MalformedQuotationException(line);
      }
      String entry=null;
      String restOfLine=line;
      for (int i=0; i < headers.length; i++) {
        if (i == headers.length - 1) {
          if (inQuot(restOfLine))           throw new MalformedQuotationException(restOfLine);
          entries.get(headers[i]).add(new CSVEntry(restOfLine,lineno,i));
        }
 else {
          int a=restOfLine.indexOf(Character.toString((char)seperator));
          int b=1;
          if (a == -1) {
            out.println(String.format("String_Node_Str",Character.toString((char)seperator),String.format("String_Node_Str",seperator),lineno,line));
          }
          entry=restOfLine.substring(0,a + b);
          restOfLine=restOfLine.substring(entry.length());
          while (inQuot(entry)) {
            if (restOfLine.equals("String_Node_Str"))             throw new MalformedQuotationException(entry);
            a=restOfLine.indexOf(Character.toString((char)seperator));
            entry=entry + restOfLine.substring(0,a + b);
            restOfLine=restOfLine.substring(a + b);
          }
          try {
            entries.get(headers[i]).add(new CSVEntry(entry,lineno,i));
          }
 catch (          NullPointerException e) {
            System.out.println(entries);
            System.out.println(headers + "String_Node_Str" + i);
            System.out.println(headers[i]);
            System.out.println(entry);
            System.out.println(lineno);
          }
        }
      }
    }
  }
  out.println(filename + "String_Node_Str" + (lineno - 1)+ "String_Node_Str"+ Character.toString((char)seperator)+ "String_Node_Str");
  clean(entries);
  if (!entries.keySet().contains("String_Node_Str"))   throw new CSVColumnException("String_Node_Str");
  if (!entries.keySet().contains("String_Node_Str"))   throw new CSVColumnException("String_Node_Str");
  return entries;
}