Program: 172768
Project: 172768
Buggy source:
@Override public ColumnBinary toBinary(final ColumnBinaryMakerConfig commonConfig,final ColumnBinaryMakerCustomConfigNode currentConfigNode,final IColumn column,final MakerCache makerCache) throws IOException {
  ColumnBinaryMakerConfig currentConfig=commonConfig;
  if (currentConfigNode != null) {
    currentConfig=currentConfigNode.getCurrentConfig();
  }
  byte[] nullFlagBytes=new byte[column.size()];
  List<byte[]> objList=new ArrayList<byte[]>();
  int totalLength=0;
  int logicalDataLength=0;
  int rowCount=0;
  boolean hasNull=false;
  String min="String_Node_Str";
  String max="String_Node_Str";
  for (int i=0; i < column.size(); i++) {
    ICell cell=column.get(i);
    if (cell.getType() == ColumnType.NULL) {
      nullFlagBytes[i]=(byte)1;
      objList.add(new byte[0]);
      hasNull=true;
      continue;
    }
    PrimitiveCell byteCell=(PrimitiveCell)cell;
    String strObj=byteCell.getRow().getString();
    if (strObj == null) {
      nullFlagBytes[i]=(byte)1;
      objList.add(new byte[0]);
      hasNull=true;
      continue;
    }
    byte[] obj=strObj.getBytes("String_Node_Str");
    rowCount++;
    totalLength+=obj.length;
    logicalDataLength+=strObj.length() * Character.BYTES;
    objList.add(obj);
    if (max.compareTo(strObj) < 0) {
      max=strObj;
    }
    if (min.isEmpty() || 0 < min.compareTo(strObj)) {
      min=strObj;
    }
  }
  if (!hasNull && min.equals(max)) {
    return ConstantColumnBinaryMaker.createColumnBinary(new StringObj(min),column.getColumnName(),column.size());
  }
  byte[] binary;
  int rawLength;
  int minLength=Character.BYTES * min.length();
  int maxLength=Character.BYTES * max.length();
  int headerSize=Integer.BYTES + minLength + Integer.BYTES+ maxLength+ Integer.BYTES;
  if (hasNull) {
    byte[] binaryRaw=convertBinary(nullFlagBytes,objList,currentConfig,totalLength);
    byte[] compressBinaryRaw=currentConfig.compressorClass.compress(binaryRaw,0,binaryRaw.length);
    rawLength=binaryRaw.length;
    binary=new byte[headerSize + compressBinaryRaw.length];
    ByteBuffer wrapBuffer=ByteBuffer.wrap(binary);
    wrapBuffer.putInt(minLength);
    wrapBuffer.asCharBuffer().put(min);
    wrapBuffer.position(wrapBuffer.position() + minLength);
    wrapBuffer.putInt(maxLength);
    wrapBuffer.asCharBuffer().put(max);
    wrapBuffer.position(wrapBuffer.position() + maxLength);
    wrapBuffer.putInt(0);
    wrapBuffer.put(compressBinaryRaw);
  }
 else {
    rawLength=totalLength + Integer.BYTES * objList.size();
    byte[] binaryRaw=new byte[rawLength];
    ByteBuffer objBuffer=ByteBuffer.wrap(binaryRaw);
    for (    byte[] obj : objList) {
      objBuffer.putInt(obj.length);
      objBuffer.put(obj);
    }
    byte[] compressBinaryRaw=currentConfig.compressorClass.compress(binaryRaw,0,binaryRaw.length);
    binary=new byte[headerSize + compressBinaryRaw.length];
    ByteBuffer wrapBuffer=ByteBuffer.wrap(binary);
    wrapBuffer.putInt(minLength);
    wrapBuffer.asCharBuffer().put(min);
    wrapBuffer.position(wrapBuffer.position() + minLength);
    wrapBuffer.putInt(maxLength);
    wrapBuffer.asCharBuffer().put(max);
    wrapBuffer.position(wrapBuffer.position() + maxLength);
    wrapBuffer.putInt(1);
    wrapBuffer.put(compressBinaryRaw);
  }
  return new ColumnBinary(this.getClass().getName(),currentConfig.compressorClass.getClass().getName(),column.getColumnName(),ColumnType.STRING,rowCount,rawLength,logicalDataLength,-1,binary,0,binary.length,null);
}

Fixed version (ground truth):
@Override public ColumnBinary toBinary(final ColumnBinaryMakerConfig commonConfig,final ColumnBinaryMakerCustomConfigNode currentConfigNode,final IColumn column,final MakerCache makerCache) throws IOException {
  ColumnBinaryMakerConfig currentConfig=commonConfig;
  if (currentConfigNode != null) {
    currentConfig=currentConfigNode.getCurrentConfig();
  }
  byte[] nullFlagBytes=new byte[column.size()];
  List<byte[]> objList=new ArrayList<byte[]>();
  int totalLength=0;
  int logicalDataLength=0;
  int rowCount=0;
  boolean hasNull=false;
  String min=null;
  String max="String_Node_Str";
  for (int i=0; i < column.size(); i++) {
    ICell cell=column.get(i);
    if (cell.getType() == ColumnType.NULL) {
      nullFlagBytes[i]=(byte)1;
      objList.add(new byte[0]);
      hasNull=true;
      continue;
    }
    PrimitiveCell byteCell=(PrimitiveCell)cell;
    String strObj=byteCell.getRow().getString();
    if (strObj == null) {
      nullFlagBytes[i]=(byte)1;
      objList.add(new byte[0]);
      hasNull=true;
      continue;
    }
    byte[] obj=strObj.getBytes("String_Node_Str");
    rowCount++;
    totalLength+=obj.length;
    logicalDataLength+=strObj.length() * Character.BYTES;
    objList.add(obj);
    if (max.compareTo(strObj) < 0) {
      max=strObj;
    }
    if (min == null || 0 < min.compareTo(strObj)) {
      min=strObj;
    }
  }
  if (!hasNull && min.equals(max)) {
    return ConstantColumnBinaryMaker.createColumnBinary(new StringObj(min),column.getColumnName(),column.size());
  }
  byte[] binary;
  int rawLength;
  int minLength=Character.BYTES * min.length();
  int maxLength=Character.BYTES * max.length();
  int headerSize=Integer.BYTES + minLength + Integer.BYTES+ maxLength+ Integer.BYTES;
  if (hasNull) {
    byte[] binaryRaw=convertBinary(nullFlagBytes,objList,currentConfig,totalLength);
    byte[] compressBinaryRaw=currentConfig.compressorClass.compress(binaryRaw,0,binaryRaw.length);
    rawLength=binaryRaw.length;
    binary=new byte[headerSize + compressBinaryRaw.length];
    ByteBuffer wrapBuffer=ByteBuffer.wrap(binary);
    wrapBuffer.putInt(minLength);
    wrapBuffer.asCharBuffer().put(min);
    wrapBuffer.position(wrapBuffer.position() + minLength);
    wrapBuffer.putInt(maxLength);
    wrapBuffer.asCharBuffer().put(max);
    wrapBuffer.position(wrapBuffer.position() + maxLength);
    wrapBuffer.putInt(0);
    wrapBuffer.put(compressBinaryRaw);
  }
 else {
    rawLength=totalLength + Integer.BYTES * objList.size();
    byte[] binaryRaw=new byte[rawLength];
    ByteBuffer objBuffer=ByteBuffer.wrap(binaryRaw);
    for (    byte[] obj : objList) {
      objBuffer.putInt(obj.length);
      objBuffer.put(obj);
    }
    byte[] compressBinaryRaw=currentConfig.compressorClass.compress(binaryRaw,0,binaryRaw.length);
    binary=new byte[headerSize + compressBinaryRaw.length];
    ByteBuffer wrapBuffer=ByteBuffer.wrap(binary);
    wrapBuffer.putInt(minLength);
    wrapBuffer.asCharBuffer().put(min);
    wrapBuffer.position(wrapBuffer.position() + minLength);
    wrapBuffer.putInt(maxLength);
    wrapBuffer.asCharBuffer().put(max);
    wrapBuffer.position(wrapBuffer.position() + maxLength);
    wrapBuffer.putInt(1);
    wrapBuffer.put(compressBinaryRaw);
  }
  return new ColumnBinary(this.getClass().getName(),currentConfig.compressorClass.getClass().getName(),column.getColumnName(),ColumnType.STRING,rowCount,rawLength,logicalDataLength,-1,binary,0,binary.length,null);
}