Program: 3136
Project: 3136
Buggy source:
public static void main(String[] args) throws Exception {
  Compiler compiler=new Compiler();
  if (args.length == 0) {
    usage();
  }
  String classPath="String_Node_Str";
  String outputDir="String_Node_Str";
  int count=0;
  boolean classPathDefined=false;
  boolean outputDirDefined=false;
  for (; ; ) {
    if (args[count].charAt(0) == '-') {
      if (args.length <= count + 1) {
        usage();
      }
      if ((args[count].equals("String_Node_Str") || args[count].equals("String_Node_Str")) && !classPathDefined) {
        classPath=args[++count];
        classPathDefined=true;
      }
 else       if (args[count].equals("String_Node_Str") && !outputDirDefined) {
        outputDir=args[++count];
        outputDirDefined=true;
      }
 else {
        usage();
      }
      count++;
      if (count >= args.length) {
        break;
      }
    }
 else {
      break;
    }
  }
  if (args.length <= count) {
    usage();
  }
  File[] files=new File[args.length - count];
  for (int i=0; i < files.length; i++) {
    files[i]=new File(args[i + count]);
    if (!files[i].exists()) {
      usage("String_Node_Str" + files[i]);
    }
  }
  classPath+=File.pathSeparator + System.getProperty("String_Node_Str");
  Map<String,byte[]> classes=compiler.compile(files,new PrintWriter(System.err),"String_Node_Str",classPath);
  if (classes != null) {
    for (    String c : classes.keySet()) {
      String name=c.replace("String_Node_Str",File.separator);
      int index=name.lastIndexOf(File.separatorChar);
      String dir=outputDir + File.separator;
      if (index != -1) {
        dir+=name.substring(0,index);
      }
      new File(dir).mkdirs();
      String file;
      if (index != -1) {
        file=name.substring(index + 1);
      }
 else {
        file=name;
      }
      file+="String_Node_Str";
      File out=new File(dir,file);
      FileOutputStream fos=new FileOutputStream(out);
      fos.write(classes.get(c));
      fos.close();
    }
  }
}

Fixed version (ground truth):
public static void main(String[] args) throws Exception {
  Compiler compiler=new Compiler();
  if (args.length == 0) {
    usage();
  }
  String classPath="String_Node_Str";
  String outputDir="String_Node_Str";
  int count=0;
  boolean classPathDefined=false;
  boolean outputDirDefined=false;
  for (; ; ) {
    if (args[count].charAt(0) == '-') {
      if (args.length <= count + 1) {
        usage();
      }
      if ((args[count].equals("String_Node_Str") || args[count].equals("String_Node_Str")) && !classPathDefined) {
        classPath=args[++count];
        classPathDefined=true;
      }
 else       if (args[count].equals("String_Node_Str") && !outputDirDefined) {
        outputDir=args[++count];
        outputDirDefined=true;
      }
 else {
        usage();
      }
      count++;
      if (count >= args.length) {
        break;
      }
    }
 else {
      break;
    }
  }
  if (args.length <= count) {
    usage();
  }
  File[] files=new File[args.length - count];
  for (int i=0; i < files.length; i++) {
    files[i]=new File(args[i + count]);
    if (!files[i].exists()) {
      usage("String_Node_Str" + files[i]);
    }
  }
  classPath+=File.pathSeparator + System.getProperty("String_Node_Str");
  Map<String,byte[]> classes=compiler.compile(files,new PrintWriter(System.err),"String_Node_Str",classPath);
  if (classes != null) {
    for (    Map.Entry<String,byte[]> c : classes.entrySet()) {
      String name=c.getKey().replace("String_Node_Str",File.separator);
      int index=name.lastIndexOf(File.separatorChar);
      String dir=outputDir + File.separator;
      if (index != -1) {
        dir+=name.substring(0,index);
      }
      new File(dir).mkdirs();
      String file;
      if (index != -1) {
        file=name.substring(index + 1);
      }
 else {
        file=name;
      }
      file+="String_Node_Str";
      File out=new File(dir,file);
      FileOutputStream fos=new FileOutputStream(out);
      fos.write(c.getValue());
      fos.close();
    }
  }
}