Program: 168535
Project: 168535
Buggy source:
private int extractRecursive(FSEntry rec,File outDir,ProgressMonitor progressDialog,ObjectContainer<Boolean> overwriteAll,boolean dataFork,boolean resourceFork){
  if (!dataFork && !resourceFork)   throw new IllegalArgumentException("String_Node_Str");
  if (progressDialog.cancelSignaled()) {
    progressDialog.confirmCancel();
    return 0;
  }
  int errorCount=0;
  if (!outDir.exists()) {
    String[] options=new String[]{"String_Node_Str","String_Node_Str"};
    int reply=JOptionPane.showOptionDialog(this,"String_Node_Str" + outDir.getAbsolutePath() + "String_Node_Str"+ "String_Node_Str","String_Node_Str",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]);
    if (reply != 0) {
      ++errorCount;
      progressDialog.signalCancel();
      return errorCount;
    }
 else {
      if (!outDir.mkdirs()) {
        JOptionPane.showMessageDialog(this,"String_Node_Str" + outDir.getAbsolutePath() + "String_Node_Str","String_Node_Str",JOptionPane.ERROR_MESSAGE);
        ++errorCount;
        progressDialog.signalCancel();
        return errorCount;
      }
    }
  }
  if (rec instanceof FSFile) {
    if (dataFork)     errorCount+=extractFile((FSFile)rec,outDir,progressDialog,overwriteAll,false);
    if (resourceFork)     errorCount+=extractFile((FSFile)rec,outDir,progressDialog,overwriteAll,true);
  }
 else   if (rec instanceof FSFolder) {
    String dirName=rec.getName();
    progressDialog.updateCurrentDir(dirName);
    FSEntry[] contents=((FSFolder)rec).list();
    File thisDir=new File(outDir,dirName);
    if (!overwriteAll.o && thisDir.exists()) {
      String[] options=new String[]{"String_Node_Str","String_Node_Str"};
      int reply=JOptionPane.showOptionDialog(this,"String_Node_Str" + thisDir.getAbsolutePath() + "String_Node_Str"+ "String_Node_Str","String_Node_Str",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]);
      if (reply != 0) {
        ++errorCount;
        progressDialog.signalCancel();
        return errorCount;
      }
    }
    if (thisDir.mkdir() || thisDir.exists()) {
      for (      FSEntry outRec : contents) {
        errorCount+=extractRecursive(outRec,thisDir,progressDialog,overwriteAll,dataFork,resourceFork);
      }
    }
 else {
      int reply=JOptionPane.showConfirmDialog(this,"String_Node_Str" + thisDir.getAbsolutePath() + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str","String_Node_Str",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
      if (reply == JOptionPane.NO_OPTION)       progressDialog.signalCancel();
      ++errorCount;
    }
  }
  return errorCount;
}

Fixed version (ground truth):
private int extractRecursive(FSEntry rec,File outDir,ProgressMonitor progressDialog,ObjectContainer<Boolean> overwriteAll,boolean dataFork,boolean resourceFork){
  if (!dataFork && !resourceFork) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  if (progressDialog.cancelSignaled()) {
    progressDialog.confirmCancel();
    return 0;
  }
  int errorCount=0;
  if (!outDir.exists()) {
    String[] options=new String[]{"String_Node_Str","String_Node_Str"};
    int reply=JOptionPane.showOptionDialog(this,"String_Node_Str" + outDir.getAbsolutePath() + "String_Node_Str"+ "String_Node_Str","String_Node_Str",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]);
    if (reply != 0) {
      ++errorCount;
      progressDialog.signalCancel();
      return errorCount;
    }
 else {
      if (!outDir.mkdirs()) {
        JOptionPane.showMessageDialog(this,"String_Node_Str" + outDir.getAbsolutePath() + "String_Node_Str","String_Node_Str",JOptionPane.ERROR_MESSAGE);
        ++errorCount;
        progressDialog.signalCancel();
        return errorCount;
      }
    }
  }
  if (rec instanceof FSFile) {
    if (dataFork) {
      errorCount+=extractFile((FSFile)rec,outDir,progressDialog,overwriteAll,false);
    }
    if (resourceFork) {
      errorCount+=extractFile((FSFile)rec,outDir,progressDialog,overwriteAll,true);
    }
  }
 else   if (rec instanceof FSFolder) {
    String dirName=rec.getName();
    progressDialog.updateCurrentDir(dirName);
    FSEntry[] contents=((FSFolder)rec).list();
    File thisDir=new File(outDir,dirName);
    if (!overwriteAll.o && thisDir.exists()) {
      String[] options=new String[]{"String_Node_Str","String_Node_Str"};
      int reply=JOptionPane.showOptionDialog(this,"String_Node_Str" + thisDir.getAbsolutePath() + "String_Node_Str"+ "String_Node_Str","String_Node_Str",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]);
      if (reply != 0) {
        ++errorCount;
        progressDialog.signalCancel();
        return errorCount;
      }
    }
    if (thisDir.mkdir() || thisDir.exists()) {
      for (      FSEntry outRec : contents) {
        errorCount+=extractRecursive(outRec,thisDir,progressDialog,overwriteAll,dataFork,resourceFork);
      }
    }
 else {
      int reply=JOptionPane.showConfirmDialog(this,"String_Node_Str" + thisDir.getAbsolutePath() + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str","String_Node_Str",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
      if (reply == JOptionPane.NO_OPTION) {
        progressDialog.signalCancel();
      }
      ++errorCount;
    }
  }
  return errorCount;
}