Program: 58646
Project: 58646
Buggy source:
@Override protected void loadDataParseFile(BufferedReader brFile,final int iNumberOfLinesInFile) throws IOException {
  allocateStorageBufferForTokenPattern();
  swtGuiManager.setProgressBarText("String_Node_Str" + this.getFileName());
  String sLine;
  String sTmpToken;
  int iColumnIndex=0;
  float fProgressBarFactor=100f / iStopParsingAtLine;
  int max=iStopParsingAtLine - iStartParsingAtLine + 1;
  while ((sLine=brFile.readLine()) != null && iLineInFile <= iStopParsingAtLine) {
    if (iLineInFile < this.iStartParsingAtLine) {
      iLineInFile++;
      continue;
    }
    sLine=sLine.replace(sTokenSeperator + sTokenSeperator,sTokenSeperator + "String_Node_Str" + sTokenSeperator);
    StringTokenizer strTokenLine=new StringTokenizer(sLine,sTokenSeperator);
    iColumnIndex=0;
    for (    EStorageType columnDataType : alColumnDataTypes) {
      if (strTokenLine.hasMoreTokens()) {
switch (columnDataType) {
case INT:
          alIntBuffers.get(iColumnIndex)[iLineInFile - iStartParsingAtLine]=Integer.valueOf(strTokenLine.nextToken()).intValue();
        iColumnIndex++;
      break;
case FLOAT:
    Float fValue;
  sTmpToken=strTokenLine.nextToken();
try {
  fValue=Float.valueOf(sTmpToken).floatValue();
}
 catch (NumberFormatException nfe) {
  String sErrorMessage="String_Node_Str" + sTmpToken + "String_Node_Str";
  MessageDialog.openError(new Shell(),"String_Node_Str",sErrorMessage);
  GeneralManager.get().getLogger().log(new Status(Status.ERROR,GeneralManager.PLUGIN_ID,sErrorMessage));
  throw nfe;
}
if (bUseExperimentClusterInfo) {
if (iLineInFile < max - 1) alFloatBuffers.get(iColumnIndex)[iLineInFile - iStartParsingAtLine]=fValue;
 else if (iLineInFile == max - 1) alGroupInfo.get(2)[iColumnIndex]=Integer.valueOf(sTmpToken).intValue();
 else if (iLineInFile == max) alGroupInfo.get(3)[iColumnIndex]=Integer.valueOf(sTmpToken).intValue();
}
 else alFloatBuffers.get(iColumnIndex)[iLineInFile - iStartParsingAtLine]=fValue;
iColumnIndex++;
break;
case STRING:
alStringBuffers.get(iColumnIndex).add(strTokenLine.nextToken());
iColumnIndex++;
break;
case SKIP:
strTokenLine.nextToken();
break;
case ABORT:
iColumnIndex=alColumnDataTypes.size();
break;
case GROUP_NUMBER:
alGroupInfo.get(0)[iLineInFile - iStartParsingAtLine]=Integer.valueOf(strTokenLine.nextToken()).intValue();
break;
case GROUP_REPRESENTATIVE:
alGroupInfo.get(1)[iLineInFile - iStartParsingAtLine]=Integer.valueOf(strTokenLine.nextToken()).intValue();
break;
default :
throw new IllegalStateException("String_Node_Str" + columnDataType.toString());
}
if (iColumnIndex == alColumnDataTypes.size()) {
continue;
}
}
}
iLineInFile++;
if (iLineInFile % 1000 == 0) {
swtGuiManager.setProgressBarPercentage((int)(fProgressBarFactor * iLineInFile));
}
}
}

Fixed version (ground truth):
@Override protected void loadDataParseFile(BufferedReader brFile,final int iNumberOfLinesInFile) throws IOException {
  allocateStorageBufferForTokenPattern();
  swtGuiManager.setProgressBarText("String_Node_Str" + this.getFileName());
  String sLine;
  String sTmpToken;
  int iColumnIndex=0;
  float fProgressBarFactor=100f / iStopParsingAtLine;
  int max=iStopParsingAtLine - iStartParsingAtLine + 1;
  while ((sLine=brFile.readLine()) != null && iLineInFile <= iStopParsingAtLine) {
    if (iLineInFile < this.iStartParsingAtLine) {
      iLineInFile++;
      continue;
    }
    sLine=sLine.replace(sTokenSeperator + sTokenSeperator,sTokenSeperator + "String_Node_Str" + sTokenSeperator);
    if (sLine.substring(0,1).equals(sTokenSeperator))     sLine="String_Node_Str" + sLine;
    StringTokenizer strTokenLine=new StringTokenizer(sLine,sTokenSeperator);
    iColumnIndex=0;
    for (    EStorageType columnDataType : alColumnDataTypes) {
      if (strTokenLine.hasMoreTokens()) {
switch (columnDataType) {
case INT:
          alIntBuffers.get(iColumnIndex)[iLineInFile - iStartParsingAtLine]=Integer.valueOf(strTokenLine.nextToken()).intValue();
        iColumnIndex++;
      break;
case FLOAT:
    Float fValue;
  sTmpToken=strTokenLine.nextToken();
try {
  fValue=Float.valueOf(sTmpToken).floatValue();
}
 catch (NumberFormatException nfe) {
  String sErrorMessage="String_Node_Str" + sTmpToken + "String_Node_Str";
  MessageDialog.openError(new Shell(),"String_Node_Str",sErrorMessage);
  GeneralManager.get().getLogger().log(new Status(Status.ERROR,GeneralManager.PLUGIN_ID,sErrorMessage));
  throw nfe;
}
if (bUseExperimentClusterInfo) {
if (iLineInFile < max - 1) alFloatBuffers.get(iColumnIndex)[iLineInFile - iStartParsingAtLine]=fValue;
 else if (iLineInFile == max - 1) alGroupInfo.get(2)[iColumnIndex]=Integer.valueOf(sTmpToken).intValue();
 else if (iLineInFile == max) alGroupInfo.get(3)[iColumnIndex]=Integer.valueOf(sTmpToken).intValue();
}
 else alFloatBuffers.get(iColumnIndex)[iLineInFile - iStartParsingAtLine]=fValue;
iColumnIndex++;
break;
case STRING:
alStringBuffers.get(iColumnIndex).add(strTokenLine.nextToken());
iColumnIndex++;
break;
case SKIP:
strTokenLine.nextToken();
break;
case ABORT:
iColumnIndex=alColumnDataTypes.size();
break;
case GROUP_NUMBER:
alGroupInfo.get(0)[iLineInFile - iStartParsingAtLine]=Integer.valueOf(strTokenLine.nextToken()).intValue();
break;
case GROUP_REPRESENTATIVE:
alGroupInfo.get(1)[iLineInFile - iStartParsingAtLine]=Integer.valueOf(strTokenLine.nextToken()).intValue();
break;
default :
throw new IllegalStateException("String_Node_Str" + columnDataType.toString());
}
if (iColumnIndex == alColumnDataTypes.size()) {
continue;
}
}
}
iLineInFile++;
if (iLineInFile % 1000 == 0) {
swtGuiManager.setProgressBarPercentage((int)(fProgressBarFactor * iLineInFile));
}
}
}