Program: 90220
Project: 90220
Buggy source:
/** 
 * Return the number of bytes free on the disk that the given file resides on. This method only works on Windows. <p/> Method is slow - creates a file and starts an external process.
 * @param f A file.
 * @return Number of bytes free on the disk that the file is on
 */
private static long getFreeSpaceOnWindows(File f){
  final String scriptFileName="String_Node_Str";
  String outputText=null;
  File scriptFile=null;
  try {
    if (!f.isDirectory()) {
      f=f.getParentFile();
    }
    scriptFile=File.createTempFile(scriptFileName,"String_Node_Str");
    PrintWriter writer=new PrintWriter(new FileWriter(scriptFile,false));
    writer.println("String_Node_Str" + f.getAbsolutePath() + "String_Node_Str");
    writer.close();
    Process p=Runtime.getRuntime().exec(scriptFile.getAbsolutePath());
    InputStream reader=new BufferedInputStream(p.getInputStream());
    try {
      StringBuffer buffer=new StringBuffer();
      for (; ; ) {
        int c=reader.read();
        if (c == -1) {
          break;
        }
        buffer.append((char)c);
      }
      outputText=buffer.toString();
    }
  finally {
      reader.close();
    }
    String[] lineparts=outputText.split("String_Node_Str");
    String[] lastLineParts=lineparts[lineparts.length - 1].split("String_Node_Str");
    for (int i=0; i < lastLineParts.length; i++) {
      if (i > 0 && lastLineParts[i].endsWith("String_Node_Str")) {
        return Long.parseLong(lastLineParts[i - 1].replaceAll("String_Node_Str","String_Node_Str"));
      }
    }
    throw new IOFailure("String_Node_Str" + outputText);
  }
 catch (  NumberFormatException e) {
    throw new IOFailure("String_Node_Str" + outputText,e);
  }
catch (  IOException e) {
    throw new IOFailure("String_Node_Str",e);
  }
 finally {
    scriptFile.delete();
  }
}

Fixed version (ground truth):
/** 
 * Return the number of bytes free on the disk that the given file resides on. This method only works on Windows. <p/> Method is slow - creates a file and starts an external process.
 * @param f A file.
 * @return Number of bytes free on the disk that the file is on
 */
private static long getFreeSpaceOnWindows(File f){
  final String scriptFileName="String_Node_Str";
  String outputText=null;
  File scriptFile=null;
  try {
    if (!f.isDirectory()) {
      f=f.getAbsoluteFile().getParentFile();
    }
    scriptFile=File.createTempFile(scriptFileName,"String_Node_Str");
    PrintWriter writer=new PrintWriter(new FileWriter(scriptFile,false));
    writer.println("String_Node_Str" + f.getAbsolutePath() + "String_Node_Str");
    writer.close();
    Process p=Runtime.getRuntime().exec(scriptFile.getAbsolutePath());
    InputStream reader=new BufferedInputStream(p.getInputStream());
    try {
      StringBuffer buffer=new StringBuffer();
      for (; ; ) {
        int c=reader.read();
        if (c == -1) {
          break;
        }
        buffer.append((char)c);
      }
      outputText=buffer.toString();
    }
  finally {
      reader.close();
    }
    String[] lineparts=outputText.split("String_Node_Str");
    String[] lastLineParts=lineparts[lineparts.length - 1].split("String_Node_Str");
    for (int i=0; i < lastLineParts.length; i++) {
      if (i > 0 && lastLineParts[i].endsWith("String_Node_Str")) {
        return Long.parseLong(lastLineParts[i - 1].replaceAll("String_Node_Str","String_Node_Str"));
      }
    }
    throw new IOFailure("String_Node_Str" + outputText);
  }
 catch (  NumberFormatException e) {
    throw new IOFailure("String_Node_Str" + outputText,e);
  }
catch (  IOException e) {
    throw new IOFailure("String_Node_Str",e);
  }
 finally {
    scriptFile.delete();
  }
}