Program: 28748
Project: 28748
Buggy source:
public static void explodeModule(Archive source,File directory,boolean preserveManifest) throws IOException, DeploymentException {
  File explodedManifest=null;
  File preservedManifestFromArchive=null;
  FileArchive target=new FileArchive();
  target.create(directory.toURI());
  explodeJar(new File(source.getURI()),directory);
  if (preserveManifest) {
    explodedManifest=new File(directory,java.util.jar.JarFile.MANIFEST_NAME);
    if (explodedManifest.exists()) {
      preservedManifestFromArchive=new File(directory,PRESERVED_MANIFEST_NAME);
      if (!explodedManifest.renameTo(preservedManifestFromArchive)) {
        throw new RuntimeException(localStrings.getString("String_Node_Str",new Object[]{explodedManifest.getAbsolutePath(),preservedManifestFromArchive.getAbsolutePath()}));
      }
    }
  }
  for (Enumeration itr=source.entries(); itr.hasMoreElements(); ) {
    String fileName=(String)itr.nextElement();
    if (fileName.toLowerCase().endsWith("String_Node_Str") && (!fileName.replace('\\','/').toUpperCase(Locale.getDefault()).startsWith(WEB_INF_PREFIX))) {
      try {
        File f=new File(directory,fileName);
        ZipFile zip=new ZipFile(f,directory);
        zip.explode();
      }
 catch (      ZipFileException e) {
        IOException ioe=new IOException(e.getMessage());
        ioe.initCause(e);
        throw ioe;
      }
    }
  }
  if (preservedManifestFromArchive != null) {
    if (explodedManifest.exists()) {
      if (!explodedManifest.delete()) {
        throw new RuntimeException(localStrings.getString("String_Node_Str",new Object[]{explodedManifest.getAbsolutePath(),preservedManifestFromArchive.getAbsolutePath()}));
      }
    }
    if (!preservedManifestFromArchive.renameTo(explodedManifest)) {
      throw new RuntimeException(localStrings.getString("String_Node_Str",new Object[]{preservedManifestFromArchive.getAbsolutePath(),explodedManifest.getAbsolutePath()}));
    }
  }
  source.close();
  target.close();
}

Fixed version (ground truth):
public static void explodeModule(Archive source,File directory,boolean preserveManifest) throws IOException, DeploymentException {
  File explodedManifest=null;
  File preservedManifestFromArchive=null;
  FileArchive target=new FileArchive();
  target.create(directory.toURI());
  explodeJar(new File(source.getURI()),directory);
  if (preserveManifest) {
    explodedManifest=new File(directory,java.util.jar.JarFile.MANIFEST_NAME);
    if (explodedManifest.exists()) {
      preservedManifestFromArchive=new File(directory,PRESERVED_MANIFEST_NAME);
      if (!explodedManifest.renameTo(preservedManifestFromArchive)) {
        throw new RuntimeException(localStrings.getString("String_Node_Str",new Object[]{explodedManifest.getAbsolutePath(),preservedManifestFromArchive.getAbsolutePath()}));
      }
    }
  }
  for (Enumeration itr=source.entries(); itr.hasMoreElements(); ) {
    String fileName=(String)itr.nextElement();
    if (fileName.toLowerCase(Locale.US).endsWith("String_Node_Str") && (!fileName.replace('\\','/').toUpperCase(Locale.getDefault()).startsWith(WEB_INF_PREFIX))) {
      try {
        File f=new File(directory,fileName);
        ZipFile zip=new ZipFile(f,directory);
        zip.explode();
      }
 catch (      ZipFileException e) {
        IOException ioe=new IOException(e.getMessage());
        ioe.initCause(e);
        throw ioe;
      }
    }
  }
  if (preservedManifestFromArchive != null) {
    if (explodedManifest.exists()) {
      if (!explodedManifest.delete()) {
        throw new RuntimeException(localStrings.getString("String_Node_Str",new Object[]{explodedManifest.getAbsolutePath(),preservedManifestFromArchive.getAbsolutePath()}));
      }
    }
    if (!preservedManifestFromArchive.renameTo(explodedManifest)) {
      throw new RuntimeException(localStrings.getString("String_Node_Str",new Object[]{preservedManifestFromArchive.getAbsolutePath(),explodedManifest.getAbsolutePath()}));
    }
  }
  source.close();
  target.close();
}