Program: 169194
Project: 169194
Buggy source:
private synchronized void readFile(CSVMapperParams cp){
  if (read) {
    return;
  }
  String file=getCSVFile(cp);
  try {
    BufferedReader br=new BufferedReader(new FileReader(file));
    String line;
    StringTokenizer st;
    boolean header=Boolean.TRUE.equals(cp.getHeader());
    if (header) {
      line=br.readLine();
      if (line == null) {
        throw new RuntimeException("String_Node_Str" + file + "String_Node_Str");
      }
      st=new StringTokenizer(line,cp.getHdelim());
      int ix=0;
      while (st.hasMoreTokens()) {
        String column=st.nextToken();
        column.replaceAll("String_Node_Str","String_Node_Str");
        cols.add(column);
        colindex.put(column,new Integer(ix));
        ++ix;
      }
    }
    while (cp.getSkip() > 0) {
      br.readLine();
      cp.setSkip(cp.getSkip() - 1);
    }
    int i=0;
    line=br.readLine();
    if (line != null && !header) {
      st=new StringTokenizer(line,cp.getDelim());
      int j=0;
      while (j < st.countTokens()) {
        String colname="String_Node_Str" + j;
        cols.add(colname);
        colindex.put(colname,new Integer(j));
        j++;
      }
    }
    while (line != null) {
      st=new StringTokenizer(line,cp.getDelim());
      List<String> colContent=new ArrayList<String>();
      while (st.hasMoreTokens()) {
        String tok=st.nextToken();
        colContent.add(tok);
      }
      line=br.readLine();
      ++i;
      content.add(colContent);
    }
    read=true;
  }
 catch (  FileNotFoundException e) {
    throw new RuntimeException(e.getMessage(),e);
  }
catch (  IOException e) {
    throw new RuntimeException(e.getMessage(),e);
  }
}

Fixed version (ground truth):
private synchronized void readFile(CSVMapperParams cp){
  if (read) {
    return;
  }
  String file=getCSVFile(cp);
  try {
    BufferedReader br=new BufferedReader(new FileReader(file));
    String line;
    StringTokenizer st;
    boolean header=Boolean.TRUE.equals(cp.getHeader());
    if (header) {
      line=br.readLine();
      if (line == null) {
        throw new RuntimeException("String_Node_Str" + file + "String_Node_Str");
      }
      st=new StringTokenizer(line,cp.getHdelim());
      int ix=0;
      while (st.hasMoreTokens()) {
        String column=st.nextToken();
        column=column.replaceAll("String_Node_Str","String_Node_Str");
        cols.add(column);
        colindex.put(column,new Integer(ix));
        ++ix;
      }
    }
    while (cp.getSkip() > 0) {
      br.readLine();
      cp.setSkip(cp.getSkip() - 1);
    }
    int i=0;
    line=br.readLine();
    if (line != null && !header) {
      st=new StringTokenizer(line,cp.getDelim());
      int j=0;
      while (j < st.countTokens()) {
        String colname="String_Node_Str" + j;
        cols.add(colname);
        colindex.put(colname,new Integer(j));
        j++;
      }
    }
    while (line != null) {
      st=new StringTokenizer(line,cp.getDelim());
      List<String> colContent=new ArrayList<String>();
      while (st.hasMoreTokens()) {
        String tok=st.nextToken();
        colContent.add(tok);
      }
      line=br.readLine();
      ++i;
      content.add(colContent);
    }
    read=true;
  }
 catch (  FileNotFoundException e) {
    throw new RuntimeException(e.getMessage(),e);
  }
catch (  IOException e) {
    throw new RuntimeException(e.getMessage(),e);
  }
}