Program: 44905
Project: 44905
Buggy source:
/** 
 * Tries to copy the given source file to the specified destination file (see   {@link #copyFile(AbstractFile,AbstractFile,boolean)}displaying a generic error dialog   {@link #showErrorDialog(String,String) #showErrorDialog()} if something went wrong, and giving the user the choice to skip the file, retry or cancel.
 * @return true if the file was properly copied, false if the transfer was interrupted / aborted by the user
 */
protected boolean tryCopyFile(AbstractFile sourceFile,AbstractFile destFile,boolean append,String errorDialogTitle){
  do {
    try {
      copyFile(sourceFile,destFile,append);
      return true;
    }
 catch (    FileTransferException e) {
      if (getState() == INTERRUPTED || wasCurrentFileSkipped())       return false;
      if (com.mucommander.Debug.ON) {
        com.mucommander.Debug.trace("String_Node_Str" + e);
        e.printStackTrace();
      }
      int reason=e.getReason();
      int choice;
switch (reason) {
case FileTransferException.OPENING_SOURCE:
        choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str",sourceFile.getName()));
      break;
case FileTransferException.OPENING_DESTINATION:
    choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str",sourceFile.getName()));
  break;
case FileTransferException.SOURCE_AND_DESTINATION_IDENTICAL:
choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str"));
break;
case FileTransferException.CHECKSUM_MISMATCH:
choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str"));
break;
default :
choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str",sourceFile.getName()),new String[]{SKIP_TEXT,APPEND_TEXT,RETRY_TEXT,CANCEL_TEXT},new int[]{SKIP_ACTION,APPEND_ACTION,RETRY_ACTION,CANCEL_ACTION});
break;
}
if (choice == RETRY_ACTION || choice == APPEND_ACTION) {
currentFileByteCounter.reset();
currentFileSkippedByteCounter.reset();
append=choice == APPEND_ACTION;
continue;
}
return false;
}
}
 while (true);
}

Fixed version (ground truth):
/** 
 * Tries to copy the given source file to the specified destination file (see   {@link #copyFile(AbstractFile,AbstractFile,boolean)}displaying a generic error dialog   {@link #showErrorDialog(String,String) #showErrorDialog()} if something went wrong, and giving the user the choice to skip the file, retry or cancel.
 * @return true if the file was properly copied, false if the transfer was interrupted / aborted by the user
 */
protected boolean tryCopyFile(AbstractFile sourceFile,AbstractFile destFile,boolean append,String errorDialogTitle){
  do {
    try {
      copyFile(sourceFile,destFile,append);
      return true;
    }
 catch (    FileTransferException e) {
      if (getState() == INTERRUPTED || wasCurrentFileSkipped())       return false;
      if (com.mucommander.Debug.ON) {
        com.mucommander.Debug.trace("String_Node_Str" + e);
        e.printStackTrace();
      }
      int reason=e.getReason();
      int choice;
switch (reason) {
case FileTransferException.OPENING_SOURCE:
        choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str",sourceFile.getName()));
      break;
case FileTransferException.OPENING_DESTINATION:
    choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str",destFile.getName()));
  break;
case FileTransferException.SOURCE_AND_DESTINATION_IDENTICAL:
choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str"));
break;
case FileTransferException.CHECKSUM_MISMATCH:
choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str"));
break;
default :
choice=showErrorDialog(errorDialogTitle,Translator.get("String_Node_Str",sourceFile.getName()),new String[]{SKIP_TEXT,APPEND_TEXT,RETRY_TEXT,CANCEL_TEXT},new int[]{SKIP_ACTION,APPEND_ACTION,RETRY_ACTION,CANCEL_ACTION});
break;
}
if (choice == RETRY_ACTION || choice == APPEND_ACTION) {
currentFileByteCounter.reset();
currentFileSkippedByteCounter.reset();
append=choice == APPEND_ACTION;
continue;
}
return false;
}
}
 while (true);
}