Program: 55347
Project: 55347
Buggy source:
@Override public void configure(Configuration config){
  super.configure(config);
  numFields=config.getInteger(NUM_FIELDS_PARAMETER,-1);
  if (numFields < 1) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  int[] textPosIdx=new int[numFields];
  boolean anyTextPosSet=false;
  boolean allTextPosSet=true;
  int maxTextPos=-1;
  for (int i=0; i < numFields; i++) {
    int pos=config.getInteger(TEXT_POSITION_PARAMETER_PREFIX + i,-1);
    if (pos == -1) {
      allTextPosSet=false;
      textPosIdx[i]=i;
      maxTextPos=i;
    }
 else {
      anyTextPosSet=true;
      textPosIdx[i]=pos;
      maxTextPos=pos > maxTextPos ? pos : maxTextPos;
    }
  }
  if (anyTextPosSet && !allTextPosSet) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  int[] recPosIdx=new int[numFields];
  boolean anyRecPosSet=false;
  boolean allRecPosSet=true;
  for (int i=0; i < numFields; i++) {
    int pos=config.getInteger(RECORD_POSITION_PARAMETER_PREFIX + i,-1);
    if (pos == -1) {
      allRecPosSet=false;
      recPosIdx[i]=i;
    }
 else {
      anyRecPosSet=true;
      recPosIdx[i]=pos;
    }
  }
  if (anyRecPosSet && !allRecPosSet) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  this.fieldParsers=new FieldParser[maxTextPos + 1];
  this.fieldValues=new Value[maxTextPos + 1];
  this.recordPositions=new int[maxTextPos + 1];
  for (int j=0; j < maxTextPos; j++) {
    fieldParsers[j]=null;
    fieldValues[j]=null;
    recordPositions[j]=-1;
  }
  for (int i=0; i < numFields; i++) {
    int pos=textPosIdx[i];
    recordPositions[pos]=recPosIdx[i];
    @SuppressWarnings("String_Node_Str") Class<? extends FieldParser<Value>> clazz=(Class<? extends FieldParser<Value>>)config.getClass(FIELD_PARSER_PARAMETER_PREFIX + i,null);
    if (clazz == null) {
      throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str" + i);
    }
    try {
      fieldParsers[pos]=clazz.newInstance();
    }
 catch (    InstantiationException ie) {
      throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str" + i);
    }
catch (    IllegalAccessException e) {
      throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str" + i);
    }
    fieldValues[pos]=fieldParsers[pos].getValue();
  }
  final String fieldDelimStr=config.getString(FIELD_DELIMITER_PARAMETER,"String_Node_Str");
  if (fieldDelimStr.length() != 1) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  this.fieldDelim=fieldDelimStr.charAt(0);
}

Fixed version (ground truth):
@Override public void configure(Configuration config){
  super.configure(config);
  numFields=config.getInteger(NUM_FIELDS_PARAMETER,-1);
  if (numFields < 1) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  int[] textPosIdx=new int[numFields];
  boolean anyTextPosSet=false;
  boolean allTextPosSet=true;
  int maxTextPos=-1;
  for (int i=0; i < numFields; i++) {
    int pos=config.getInteger(TEXT_POSITION_PARAMETER_PREFIX + i,-1);
    if (pos == -1) {
      allTextPosSet=false;
      textPosIdx[i]=i;
      maxTextPos=i;
    }
 else {
      anyTextPosSet=true;
      textPosIdx[i]=pos;
      maxTextPos=pos > maxTextPos ? pos : maxTextPos;
    }
  }
  if (anyTextPosSet && !allTextPosSet) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  int[] recPosIdx=new int[numFields];
  boolean anyRecPosSet=false;
  boolean allRecPosSet=true;
  for (int i=0; i < numFields; i++) {
    int pos=config.getInteger(RECORD_POSITION_PARAMETER_PREFIX + i,-1);
    if (pos == -1) {
      allRecPosSet=false;
      recPosIdx[i]=i;
    }
 else {
      anyRecPosSet=true;
      recPosIdx[i]=pos;
    }
  }
  if (anyRecPosSet && !allRecPosSet) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  this.fieldParsers=new FieldParser[maxTextPos + 1];
  this.fieldValues=new Value[maxTextPos + 1];
  this.recordPositions=new int[maxTextPos + 1];
  for (int j=0; j < maxTextPos; j++) {
    fieldParsers[j]=null;
    fieldValues[j]=null;
    recordPositions[j]=-1;
  }
  for (int i=0; i < numFields; i++) {
    int pos=textPosIdx[i];
    recordPositions[pos]=recPosIdx[i];
    @SuppressWarnings("String_Node_Str") Class<? extends FieldParser<Value>> clazz=(Class<? extends FieldParser<Value>>)config.getClass(FIELD_PARSER_PARAMETER_PREFIX + i,null);
    if (clazz == null) {
      throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str" + i);
    }
    try {
      fieldParsers[pos]=clazz.newInstance();
      fieldParsers[pos].configure(config);
    }
 catch (    InstantiationException ie) {
      throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str" + i);
    }
catch (    IllegalAccessException e) {
      throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str" + i);
    }
    fieldValues[pos]=fieldParsers[pos].getValue();
  }
  final String fieldDelimStr=config.getString(FIELD_DELIMITER_PARAMETER,"String_Node_Str");
  if (fieldDelimStr.length() != 1) {
    throw new IllegalArgumentException("String_Node_Str" + "String_Node_Str");
  }
  this.fieldDelim=fieldDelimStr.charAt(0);
}