Program: 168505
Project: 168505
Buggy source:
/** 
 * UnHFS entry point. The main method's only responsability is to parse and validate program arguments. It then passes them on to the static method unhfs(...), which contains the actual program logic.
 * @param args program arguments.
 */
public static void main(String[] args){
  String outputDirname="String_Node_Str";
  String fsDirectory="String_Node_Str";
  boolean extractResourceForks=false;
  boolean verbose=false;
  int partitionNumber=-1;
  char[] password=null;
  int i;
  for (i=0; i < args.length; ++i) {
    String curArg=args[i];
    if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length)       outputDirname=args[++i];
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length)       fsDirectory=args[++i];
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length) {
        String value=args[++i];
        if (value.equalsIgnoreCase("String_Node_Str")) {
          extractResourceForks=false;
        }
 else         if (value.equalsIgnoreCase("String_Node_Str")) {
          extractResourceForks=true;
        }
 else {
          System.err.println("String_Node_Str" + value + "String_Node_Str");
          printUsage(System.err);
          System.exit(1);
        }
      }
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length) {
        try {
          partitionNumber=Integer.parseInt(args[++i]);
        }
 catch (        NumberFormatException nfe) {
          System.err.println("String_Node_Str" + args[i] + "String_Node_Str");
          printUsage(System.err);
          System.exit(1);
        }
      }
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length) {
        password=args[++i].toCharArray();
      }
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      verbose=true;
    }
 else     if (curArg.equals("String_Node_Str")) {
      ++i;
      break;
    }
 else     break;
  }
  if (i != args.length - 1) {
    printUsage(System.err);
    System.exit(1);
  }
  String inputFilename=args[i];
  File inputFile=new File(inputFilename);
  if (!(inputFile.exists() && inputFile.isFile() && inputFile.canRead())) {
    System.err.println("String_Node_Str" + inputFilename + "String_Node_Str");
    printUsage(System.err);
    System.exit(1);
  }
  File outputDir=new File(outputDirname);
  if (!(outputDir.exists() && outputDir.isDirectory())) {
    System.err.println("String_Node_Str" + outputDirname + "String_Node_Str");
    printUsage(System.err);
    System.exit(1);
  }
  ReadableRandomAccessStream inputStream;
  if (WindowsLowLevelIO.isSystemSupported())   inputStream=new WindowsLowLevelIO(inputFilename);
 else   inputStream=new ReadableFileStream(inputFilename);
  try {
    unhfs(System.out,inputStream,outputDir,fsDirectory,password,extractResourceForks,partitionNumber,verbose);
    System.exit(0);
  }
 catch (  RuntimeIOException e) {
    System.err.println("String_Node_Str");
    e.printStackTrace();
    System.exit(1);
  }
}

Fixed version (ground truth):
/** 
 * UnHFS entry point. The main method's only responsibility is to parse and validate program arguments. It then passes them on to the static method unhfs(...), which contains the actual program logic.
 * @param args program arguments.
 */
public static void main(String[] args){
  String outputDirname="String_Node_Str";
  String fsDirectory="String_Node_Str";
  boolean extractResourceForks=false;
  boolean verbose=false;
  int partitionNumber=-1;
  char[] password=null;
  int i;
  for (i=0; i < args.length; ++i) {
    String curArg=args[i];
    if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length)       outputDirname=args[++i];
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length)       fsDirectory=args[++i];
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length) {
        String value=args[++i];
        if (value.equalsIgnoreCase("String_Node_Str")) {
          extractResourceForks=false;
        }
 else         if (value.equalsIgnoreCase("String_Node_Str")) {
          extractResourceForks=true;
        }
 else {
          System.err.println("String_Node_Str" + value + "String_Node_Str");
          printUsage(System.err);
          System.exit(1);
        }
      }
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length) {
        try {
          partitionNumber=Integer.parseInt(args[++i]);
        }
 catch (        NumberFormatException nfe) {
          System.err.println("String_Node_Str" + args[i] + "String_Node_Str");
          printUsage(System.err);
          System.exit(1);
        }
      }
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      if (i + 1 < args.length) {
        password=args[++i].toCharArray();
      }
 else {
        printUsage(System.err);
        System.exit(1);
      }
    }
 else     if (curArg.equals("String_Node_Str")) {
      verbose=true;
    }
 else     if (curArg.equals("String_Node_Str")) {
      ++i;
      break;
    }
 else     break;
  }
  if (i != args.length - 1) {
    printUsage(System.err);
    System.exit(1);
  }
  String inputFilename=args[i];
  File inputFile=new File(inputFilename);
  if (!(inputFile.exists() && inputFile.isFile() && inputFile.canRead())) {
    System.err.println("String_Node_Str" + inputFilename + "String_Node_Str");
    printUsage(System.err);
    System.exit(1);
  }
  File outputDir=new File(outputDirname);
  if (!(outputDir.exists() && outputDir.isDirectory())) {
    System.err.println("String_Node_Str" + outputDirname + "String_Node_Str");
    printUsage(System.err);
    System.exit(1);
  }
  ReadableRandomAccessStream inputStream;
  if (WindowsLowLevelIO.isSystemSupported())   inputStream=new WindowsLowLevelIO(inputFilename);
 else   inputStream=new ReadableFileStream(inputFilename);
  try {
    unhfs(System.out,inputStream,outputDir,fsDirectory,password,extractResourceForks,partitionNumber,verbose);
    System.exit(0);
  }
 catch (  RuntimeIOException e) {
    System.err.println("String_Node_Str");
    e.printStackTrace();
    System.exit(1);
  }
}