Program: 152310
Project: 152310
Buggy source:
/** 
 * Execute command.
 */
public void execute(Connection connection,FtpRequest request,FtpSessionImpl session,FtpReplyOutput out) throws IOException, FtpException {
  try {
    session.resetState();
    FtpServerContext serverContext=connection.getServerContext();
    String fileName=request.getArgument();
    if (fileName == null) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS,"String_Node_Str",null));
      return;
    }
    Ftplet ftpletContainer=serverContext.getFtpletContainer();
    FtpletEnum ftpletRet;
    try {
      ftpletRet=ftpletContainer.onAppendStart(session,request,out);
    }
 catch (    Exception e) {
      LOG.debug("String_Node_Str",e);
      ftpletRet=FtpletEnum.RET_DISCONNECT;
    }
    if (ftpletRet == FtpletEnum.RET_SKIP) {
      return;
    }
 else     if (ftpletRet == FtpletEnum.RET_DISCONNECT) {
      serverContext.getConnectionManager().closeConnection(connection);
      return;
    }
    FileObject file=null;
    try {
      file=session.getFileSystemView().getFileObject(fileName);
    }
 catch (    Exception e) {
      LOG.debug("String_Node_Str",e);
    }
    if (file == null) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN,"String_Node_Str",fileName));
      return;
    }
    fileName=file.getFullName();
    if (file.doesExist() && !file.isFile()) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN,"String_Node_Str",fileName));
      return;
    }
    if (!file.hasWritePermission()) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN,"String_Node_Str",fileName));
      return;
    }
    out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_150_FILE_STATUS_OKAY,"String_Node_Str",fileName));
    DataConnection dataConnection;
    try {
      dataConnection=session.getDataConnection().openConnection();
    }
 catch (    Exception e) {
      LOG.debug("String_Node_Str",e);
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_425_CANT_OPEN_DATA_CONNECTION,"String_Node_Str",fileName));
      return;
    }
    boolean failure=false;
    OutputStream os=null;
    try {
      long offset=0L;
      if (file.doesExist()) {
        offset=file.getSize();
      }
      os=file.createOutputStream(offset);
      long transSz=dataConnection.transferFromClient(os);
      String userName=session.getUser().getName();
      LOG.info("String_Node_Str" + userName + "String_Node_Str"+ fileName);
      ServerFtpStatistics ftpStat=(ServerFtpStatistics)serverContext.getFtpStatistics();
      ftpStat.setUpload(connection,file,transSz);
    }
 catch (    SocketException e) {
      LOG.debug("String_Node_Str",e);
      failure=true;
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_426_CONNECTION_CLOSED_TRANSFER_ABORTED,"String_Node_Str",fileName));
    }
catch (    IOException e) {
      LOG.debug("String_Node_Str",e);
      failure=true;
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_551_REQUESTED_ACTION_ABORTED_PAGE_TYPE_UNKNOWN,"String_Node_Str",fileName));
    }
 finally {
      IoUtils.close(os);
    }
    if (!failure) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_226_CLOSING_DATA_CONNECTION,"String_Node_Str",fileName));
      try {
        ftpletRet=ftpletContainer.onAppendEnd(session,request,out);
      }
 catch (      Exception e) {
        LOG.debug("String_Node_Str",e);
        ftpletRet=FtpletEnum.RET_DISCONNECT;
      }
      if (ftpletRet == FtpletEnum.RET_DISCONNECT) {
        serverContext.getConnectionManager().closeConnection(connection);
        return;
      }
    }
  }
  finally {
    session.getDataConnection().closeDataConnection();
  }
}

Fixed version (ground truth):
/** 
 * Execute command.
 */
public void execute(Connection connection,FtpRequest request,FtpSessionImpl session,FtpReplyOutput out) throws IOException, FtpException {
  try {
    session.resetState();
    FtpServerContext serverContext=connection.getServerContext();
    String fileName=request.getArgument();
    if (fileName == null) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS,"String_Node_Str",null));
      return;
    }
    DataConnectionFactory connFactory=session.getDataConnection();
    if (connFactory instanceof IODataConnectionFactory) {
      InetAddress address=((IODataConnectionFactory)connFactory).getInetAddress();
      if (address == null) {
        out.write(new DefaultFtpReply(FtpReply.REPLY_503_BAD_SEQUENCE_OF_COMMANDS,"String_Node_Str"));
        return;
      }
    }
    Ftplet ftpletContainer=serverContext.getFtpletContainer();
    FtpletEnum ftpletRet;
    try {
      ftpletRet=ftpletContainer.onAppendStart(session,request,out);
    }
 catch (    Exception e) {
      LOG.debug("String_Node_Str",e);
      ftpletRet=FtpletEnum.RET_DISCONNECT;
    }
    if (ftpletRet == FtpletEnum.RET_SKIP) {
      return;
    }
 else     if (ftpletRet == FtpletEnum.RET_DISCONNECT) {
      serverContext.getConnectionManager().closeConnection(connection);
      return;
    }
    FileObject file=null;
    try {
      file=session.getFileSystemView().getFileObject(fileName);
    }
 catch (    Exception e) {
      LOG.debug("String_Node_Str",e);
    }
    if (file == null) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN,"String_Node_Str",fileName));
      return;
    }
    fileName=file.getFullName();
    if (file.doesExist() && !file.isFile()) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN,"String_Node_Str",fileName));
      return;
    }
    if (!file.hasWritePermission()) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN,"String_Node_Str",fileName));
      return;
    }
    out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_150_FILE_STATUS_OKAY,"String_Node_Str",fileName));
    DataConnection dataConnection;
    try {
      dataConnection=session.getDataConnection().openConnection();
    }
 catch (    Exception e) {
      LOG.debug("String_Node_Str",e);
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_425_CANT_OPEN_DATA_CONNECTION,"String_Node_Str",fileName));
      return;
    }
    boolean failure=false;
    OutputStream os=null;
    try {
      long offset=0L;
      if (file.doesExist()) {
        offset=file.getSize();
      }
      os=file.createOutputStream(offset);
      long transSz=dataConnection.transferFromClient(os);
      String userName=session.getUser().getName();
      LOG.info("String_Node_Str" + userName + "String_Node_Str"+ fileName);
      ServerFtpStatistics ftpStat=(ServerFtpStatistics)serverContext.getFtpStatistics();
      ftpStat.setUpload(connection,file,transSz);
    }
 catch (    SocketException e) {
      LOG.debug("String_Node_Str",e);
      failure=true;
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_426_CONNECTION_CLOSED_TRANSFER_ABORTED,"String_Node_Str",fileName));
    }
catch (    IOException e) {
      LOG.debug("String_Node_Str",e);
      failure=true;
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_551_REQUESTED_ACTION_ABORTED_PAGE_TYPE_UNKNOWN,"String_Node_Str",fileName));
    }
 finally {
      IoUtils.close(os);
    }
    if (!failure) {
      out.write(FtpReplyUtil.translate(session,FtpReply.REPLY_226_CLOSING_DATA_CONNECTION,"String_Node_Str",fileName));
      try {
        ftpletRet=ftpletContainer.onAppendEnd(session,request,out);
      }
 catch (      Exception e) {
        LOG.debug("String_Node_Str",e);
        ftpletRet=FtpletEnum.RET_DISCONNECT;
      }
      if (ftpletRet == FtpletEnum.RET_DISCONNECT) {
        serverContext.getConnectionManager().closeConnection(connection);
        return;
      }
    }
  }
  finally {
    session.getDataConnection().closeDataConnection();
  }
}