Program: 112059
Project: 112059
Buggy source:
public RecordReaderWrapper(final ParquetInputFormat<MapWritable> newInputFormat,final InputSplit oldSplit,final JobConf oldJobConf,final Reporter reporter) throws IOException {
  splitLen=oldSplit.getLength();
  ParquetInputSplit split;
  if (oldSplit instanceof InputSplitWrapper) {
    split=((InputSplitWrapper)oldSplit).getRealSplit();
  }
 else   if (oldSplit instanceof FileSplit) {
    final Path finalPath=((FileSplit)oldSplit).getPath();
    final JobConf cloneJob=manageJob.cloneJobAndInit(oldJobConf,finalPath.getParent());
    final ParquetMetadata parquetMetadata=ParquetFileReader.readFooter(cloneJob,finalPath);
    final List<BlockMetaData> blocks=parquetMetadata.getBlocks();
    final FileMetaData fileMetaData=parquetMetadata.getFileMetaData();
    final List<String> listColumns=(List<String>)StringUtils.getStringCollection(cloneJob.get("String_Node_Str"));
    final MessageType fileSchema=fileMetaData.getSchema();
    MessageType requestedSchemaByUser=fileSchema;
    final List<Integer> indexColumnsWanted=ColumnProjectionUtils.getReadColumnIDs(cloneJob);
    if (indexColumnsWanted.isEmpty() == false) {
      final List<Type> typeList=new ArrayList<Type>();
      for (      final Integer idx : indexColumnsWanted) {
        typeList.add(fileSchema.getType(listColumns.get(idx)));
      }
      requestedSchemaByUser=new MessageType(fileSchema.getName(),typeList);
    }
    split=new ParquetInputSplit(finalPath,((FileSplit)oldSplit).getStart(),oldSplit.getLength(),oldSplit.getLocations(),blocks,fileSchema.toString(),requestedSchemaByUser.toString(),fileMetaData.getKeyValueMetaData());
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  TaskAttemptID taskAttemptID=TaskAttemptID.forName(oldJobConf.get("String_Node_Str"));
  if (taskAttemptID == null) {
    taskAttemptID=new TaskAttemptID();
  }
  final TaskAttemptContext taskContext=new TaskInputOutputContext(oldJobConf,taskAttemptID,null,null,new ReporterWrapper(reporter)){
    @Override public Object getCurrentKey() throws IOException, InterruptedException {
      throw new NotImplementedException();
    }
    @Override public Object getCurrentValue() throws IOException, InterruptedException {
      throw new NotImplementedException();
    }
    @Override public boolean nextKeyValue() throws IOException, InterruptedException {
      throw new NotImplementedException();
    }
  }
;
  try {
    realReader=newInputFormat.createRecordReader(split,taskContext);
    realReader.initialize(split,taskContext);
    if (realReader.nextKeyValue()) {
      firstRecord=true;
      valueObj=realReader.getCurrentValue();
    }
 else {
      eof=true;
    }
  }
 catch (  final InterruptedException e) {
    throw new IOException(e);
  }
}

Fixed version (ground truth):
public RecordReaderWrapper(final ParquetInputFormat<MapWritable> newInputFormat,final InputSplit oldSplit,final JobConf oldJobConf,final Reporter reporter) throws IOException, InterruptedException {
  splitLen=oldSplit.getLength();
  ParquetInputSplit split=null;
  if (oldSplit instanceof InputSplitWrapper) {
    split=((InputSplitWrapper)oldSplit).getRealSplit();
  }
 else   if (oldSplit instanceof FileSplit) {
    final Path finalPath=((FileSplit)oldSplit).getPath();
    final JobConf cloneJob=manageJob.cloneJobAndInit(oldJobConf,finalPath.getParent());
    final ParquetMetadata parquetMetadata=ParquetFileReader.readFooter(cloneJob,finalPath);
    final List<Footer> footers=new ArrayList<Footer>();
    footers.add(new Footer(finalPath,parquetMetadata));
    final List<ParquetInputSplit> splits=newInputFormat.getSplits(cloneJob,footers);
    for (    final ParquetInputSplit newSplit : splits) {
      if (((FileSplit)oldSplit).getStart() == newSplit.getStart() && oldSplit.getLength() == newSplit.getLength()) {
        split=newSplit;
        break;
      }
    }
    if (split == null) {
      throw new RuntimeException("String_Node_Str");
    }
  }
 else {
    throw new RuntimeException("String_Node_Str");
  }
  TaskAttemptID taskAttemptID=TaskAttemptID.forName(oldJobConf.get("String_Node_Str"));
  if (taskAttemptID == null) {
    taskAttemptID=new TaskAttemptID();
  }
  final TaskAttemptContext taskContext=new TaskInputOutputContext(oldJobConf,taskAttemptID,null,null,new ReporterWrapper(reporter)){
    @Override public Object getCurrentKey() throws IOException, InterruptedException {
      throw new NotImplementedException();
    }
    @Override public Object getCurrentValue() throws IOException, InterruptedException {
      throw new NotImplementedException();
    }
    @Override public boolean nextKeyValue() throws IOException, InterruptedException {
      throw new NotImplementedException();
    }
  }
;
  try {
    realReader=newInputFormat.createRecordReader(split,taskContext);
    realReader.initialize(split,taskContext);
    if (realReader.nextKeyValue()) {
      firstRecord=true;
      valueObj=realReader.getCurrentValue();
    }
 else {
      eof=true;
    }
  }
 catch (  final InterruptedException e) {
    throw new IOException(e);
  }
}