Program: 167500
Project: 167500
Buggy source:
@Override public void handle(Message inputMessage,IMessageTarget messageTarget){
  componentStatistics.incrementInboundMessages();
  String currentLine;
  int linesRead=0;
  int linesInMessage=0;
  int numberMessages=0;
  List<String> files=new ArrayList<String>();
  if (getFileNameFromMessage) {
    files=inputMessage.getPayload();
  }
 else {
    files.add(relativePathAndFile);
  }
  for (  String file : files) {
    InputStream inStream=null;
    BufferedReader reader=null;
    try {
      IStreamableResource resource=(IStreamableResource)this.resource.reference();
      String filePath=FormatUtils.replaceTokens(file,inputMessage.getHeader().getParametersAsString(),true);
      inStream=resource.getInputStream(filePath,mustExist);
      reader=new BufferedReader(new InputStreamReader(inStream,encoding));
      ArrayList<String> payload=new ArrayList<String>();
      while ((currentLine=reader.readLine()) != null) {
        linesRead++;
        componentStatistics.incrementNumberEntitiesProcessed();
        if (linesRead > textHeaderLinesToSkip) {
          if (linesInMessage >= textRowsPerMessage) {
            initAndSendMessage(payload,inputMessage,messageTarget,numberMessages,false);
            linesInMessage=0;
          }
          payload.add(currentLine);
          linesInMessage++;
        }
      }
      initAndSendMessage(payload,inputMessage,messageTarget,numberMessages,true);
    }
 catch (    IOException e) {
      throw new IoException("String_Node_Str" + e.getMessage());
    }
 finally {
      IOUtils.closeQuietly(reader);
      IOUtils.closeQuietly(inStream);
    }
  }
}

Fixed version (ground truth):
@Override public void handle(Message inputMessage,IMessageTarget messageTarget){
  componentStatistics.incrementInboundMessages();
  String currentLine;
  int linesRead=0;
  int linesInMessage=0;
  int numberMessages=0;
  List<String> files=new ArrayList<String>();
  if (getFileNameFromMessage) {
    files=inputMessage.getPayload();
  }
 else {
    files.add(relativePathAndFile);
  }
  for (  String file : files) {
    InputStream inStream=null;
    BufferedReader reader=null;
    try {
      IStreamableResource resource=(IStreamableResource)this.resource.reference();
      String filePath=FormatUtils.replaceTokens(file,inputMessage.getHeader().getParametersAsString(),true);
      inStream=resource.getInputStream(filePath,mustExist);
      reader=new BufferedReader(new InputStreamReader(inStream,encoding));
      ArrayList<String> payload=new ArrayList<String>();
      while ((currentLine=reader.readLine()) != null) {
        linesRead++;
        if (linesRead > textHeaderLinesToSkip) {
          if (linesInMessage >= textRowsPerMessage) {
            initAndSendMessage(payload,inputMessage,messageTarget,numberMessages,false);
            linesInMessage=0;
          }
          componentStatistics.incrementNumberEntitiesProcessed();
          payload.add(currentLine);
          linesInMessage++;
        }
      }
      initAndSendMessage(payload,inputMessage,messageTarget,numberMessages,true);
    }
 catch (    IOException e) {
      throw new IoException("String_Node_Str" + e.getMessage());
    }
 finally {
      IOUtils.closeQuietly(reader);
      IOUtils.closeQuietly(inStream);
    }
  }
}