Program: 31719
Project: 31719
Buggy source:
/** 
 * Load and initialize column binning info object.
 */
private void loadColumnBinningInfo() throws FileNotFoundException, IOException {
  BufferedReader reader=null;
  try {
    reader=new BufferedReader(new InputStreamReader(new FileInputStream(Constants.BINNING_INFO_FILE_NAME),Charset.forName("String_Node_Str")));
    String line=reader.readLine();
    while (line != null && line.length() != 0) {
      LOG.debug("String_Node_Str",line);
      String[] cols=CommonUtils.split(line.trim(),Constants.DEFAULT_DELIMITER);
      if (cols != null && cols.length >= 2) {
        Integer columnNum=Integer.parseInt(cols[0]);
        BinningInfoWritable binningInfo=new BinningInfoWritable();
        binningInfo.setColumnNum(columnNum);
        ColumnConfig columnConfig=this.columnConfigList.get(columnNum);
        int binSize=0;
        if (columnConfig.isNumerical()) {
          binningInfo.setNumeric(true);
          List<Double> list=new ArrayList<Double>();
          for (          String startElement : BIN_BOUNDARY_SPLITTER.split(cols[1])) {
            list.add(Double.valueOf(startElement));
          }
          binningInfo.setBinBoundaries(list);
          binSize=list.size();
        }
 else {
          binningInfo.setNumeric(false);
          List<String> list=new ArrayList<String>();
          Map<String,Integer> map=this.categoricalBinMap.get(columnNum);
          if (map == null) {
            map=new HashMap<String,Integer>();
            this.categoricalBinMap.put(columnNum,map);
          }
          int index=0;
          if (!StringUtils.isBlank(cols[1])) {
            for (            String startElement : BIN_BOUNDARY_SPLITTER.split(cols[1])) {
              list.add(startElement);
              map.put(startElement,index++);
            }
          }
          binningInfo.setBinCategories(list);
          binSize=list.size();
        }
        long[] binCountPos=new long[binSize + 1];
        binningInfo.setBinCountPos(binCountPos);
        long[] binCountNeg=new long[binSize + 1];
        binningInfo.setBinCountNeg(binCountNeg);
        double[] binWeightPos=new double[binSize + 1];
        binningInfo.setBinWeightPos(binWeightPos);
        double[] binWeightNeg=new double[binSize + 1];
        binningInfo.setBinWeightNeg(binWeightNeg);
        LOG.info("String_Node_Str",columnNum,binningInfo);
        this.columnBinningInfo.put(columnNum,binningInfo);
      }
      line=reader.readLine();
    }
  }
  finally {
    if (reader != null) {
      reader.close();
    }
  }
}

Fixed version (ground truth):
/** 
 * Load and initialize column binning info object.
 */
private void loadColumnBinningInfo() throws FileNotFoundException, IOException {
  BufferedReader reader=null;
  try {
    reader=new BufferedReader(new InputStreamReader(new FileInputStream(Constants.BINNING_INFO_FILE_NAME),Charset.forName("String_Node_Str")));
    String line=reader.readLine();
    while (line != null && line.length() != 0) {
      LOG.debug("String_Node_Str",line);
      String[] cols=CommonUtils.split(line.trim(),Constants.DEFAULT_DELIMITER);
      if (cols != null && cols.length >= 2) {
        Integer columnNum=Integer.parseInt(cols[0]);
        BinningInfoWritable binningInfo=new BinningInfoWritable();
        binningInfo.setColumnNum(columnNum);
        ColumnConfig columnConfig=this.columnConfigList.get(columnNum);
        int binSize=0;
        if (columnConfig.isNumerical()) {
          binningInfo.setNumeric(true);
          List<Double> list=new ArrayList<Double>();
          for (          String startElement : BIN_BOUNDARY_SPLITTER.split(cols[1])) {
            list.add(Double.valueOf(startElement));
          }
          binningInfo.setBinBoundaries(list);
          binSize=list.size();
        }
 else {
          binningInfo.setNumeric(false);
          List<String> list=new ArrayList<String>();
          Map<String,Integer> map=this.categoricalBinMap.get(columnNum);
          if (map == null) {
            map=new HashMap<String,Integer>();
            this.categoricalBinMap.put(columnNum,map);
          }
          int index=0;
          if (!StringUtils.isBlank(cols[1])) {
            for (            String startElement : BIN_BOUNDARY_SPLITTER.split(cols[1])) {
              list.add(startElement);
              map.put(startElement,index++);
            }
          }
          binningInfo.setBinCategories(list);
          binSize=list.size();
        }
        long[] binCountPos=new long[binSize + 1];
        binningInfo.setBinCountPos(binCountPos);
        long[] binCountNeg=new long[binSize + 1];
        binningInfo.setBinCountNeg(binCountNeg);
        double[] binWeightPos=new double[binSize + 1];
        binningInfo.setBinWeightPos(binWeightPos);
        double[] binWeightNeg=new double[binSize + 1];
        binningInfo.setBinWeightNeg(binWeightNeg);
        LOG.debug("String_Node_Str",columnNum,binningInfo);
        this.columnBinningInfo.put(columnNum,binningInfo);
      }
      line=reader.readLine();
    }
  }
  finally {
    if (reader != null) {
      reader.close();
    }
  }
}