Program: 64200
Project: 64200
Buggy source:
/** 
 * remove an array of files in a directory, and a list of subdirectories which will only be deleted if 'includeEmpty' is true
 * @param d directory to work from
 * @param files array of files to delete; can be of zero length
 * @param dirs array of directories to delete; can of zero length
 */
protected void removeFiles(File d,String[] files,String[] dirs){
  if (files.length > 0) {
    log("String_Node_Str" + files.length + "String_Node_Str"+ d.getAbsolutePath());
    for (int j=0; j < files.length; j++) {
      File f=new File(d,files[j]);
      log("String_Node_Str" + f.getAbsolutePath(),verbosity);
      if (!delete(f)) {
        String message="String_Node_Str" + f.getAbsolutePath();
        if (failonerror) {
          throw new BuildException(message);
        }
 else {
          log(message,quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
        }
      }
    }
  }
  if (dirs.length > 0 && includeEmpty) {
    int dirCount=0;
    for (int j=dirs.length - 1; j >= 0; j--) {
      File currDir=new File(d,dirs[j]);
      String[] dirFiles=currDir.list();
      if (dirFiles == null || dirFiles.length == 0) {
        log("String_Node_Str" + currDir.getAbsolutePath(),verbosity);
        if (!delete(currDir)) {
          String message="String_Node_Str" + currDir.getAbsolutePath();
          if (failonerror) {
            throw new BuildException(message);
          }
 else {
            log(message,quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
          }
        }
 else {
          dirCount++;
        }
      }
    }
    if (dirCount > 0) {
      log("String_Node_Str" + dirCount + "String_Node_Str"+ (dirCount == 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ d.getAbsolutePath());
    }
  }
}

Fixed version (ground truth):
/** 
 * remove an array of files in a directory, and a list of subdirectories which will only be deleted if 'includeEmpty' is true
 * @param d directory to work from
 * @param files array of files to delete; can be of zero length
 * @param dirs array of directories to delete; can of zero length
 */
protected void removeFiles(File d,String[] files,String[] dirs){
  if (files.length > 0) {
    log("String_Node_Str" + files.length + "String_Node_Str"+ d.getAbsolutePath());
    for (int j=0; j < files.length; j++) {
      File f=new File(d,files[j]);
      log("String_Node_Str" + f.getAbsolutePath(),verbosity);
      if (!delete(f)) {
        handle("String_Node_Str" + f.getAbsolutePath());
      }
    }
  }
  if (dirs.length > 0 && includeEmpty) {
    int dirCount=0;
    for (int j=dirs.length - 1; j >= 0; j--) {
      File currDir=new File(d,dirs[j]);
      String[] dirFiles=currDir.list();
      if (dirFiles == null || dirFiles.length == 0) {
        log("String_Node_Str" + currDir.getAbsolutePath(),verbosity);
        if (!delete(currDir)) {
          handle("String_Node_Str" + currDir.getAbsolutePath());
        }
 else {
          dirCount++;
        }
      }
    }
    if (dirCount > 0) {
      log("String_Node_Str" + dirCount + "String_Node_Str"+ (dirCount == 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ d.getAbsolutePath());
    }
  }
}