Program: 72812
Project: 72812
Buggy source:
/** 
 * Unzip a file into a temporary directory. Based on http://java.sun.com/developer/technicalArticles/Programming/compression/.
 * @param zipFileName  The file to be unzipped.
 * @return the list of files that were extracted.
 * @exception IOException if the file cannot be opened, if there are problems readingthe zip file or if there are problems creating the files or directories.
 */
public static List<File> unzip(String zipFileName) throws IOException {
  BufferedOutputStream destination=null;
  final int BUFFER=2048;
  byte data[]=new byte[BUFFER];
  File topDirectoryFile=File.createTempFile("String_Node_Str","String_Node_Str");
  if (!topDirectoryFile.delete()) {
    throw new IOException("String_Node_Str" + topDirectoryFile);
  }
  if (!topDirectoryFile.mkdir()) {
    throw new IOException("String_Node_Str" + topDirectoryFile);
  }
  topDirectoryFile.deleteOnExit();
  String topDirectory=topDirectoryFile.getCanonicalPath();
  System.out.println("String_Node_Str" + topDirectory);
  List<File> files=new LinkedList<File>();
  FileInputStream fileInputStream=null;
  ZipInputStream zipInputStream=null;
  try {
    fileInputStream=new FileInputStream(zipFileName);
    zipInputStream=new ZipInputStream(new BufferedInputStream(fileInputStream));
    ZipEntry entry;
    while ((entry=zipInputStream.getNextEntry()) != null) {
      String entryName=entry.getName();
      File destinationFile=new File(topDirectory,entryName);
      File destinationParent=destinationFile.getParentFile();
      if (!destinationParent.isDirectory() && !destinationParent.mkdirs()) {
        throw new IOException("String_Node_Str" + destinationParent + "String_Node_Str");
      }
      if (!entry.isDirectory()) {
        try {
          FileOutputStream fos=new FileOutputStream(destinationFile);
          destination=new BufferedOutputStream(fos,BUFFER);
          int count;
          while ((count=zipInputStream.read(data,0,BUFFER)) != -1) {
            destination.write(data,0,count);
          }
          files.add(destinationFile);
        }
  finally {
          if (destination != null) {
            destination.flush();
            destination.close();
          }
        }
      }
    }
  }
  finally {
    if (destination != null) {
      try {
        destination.close();
      }
 catch (      IOException ex) {
        System.out.println("String_Node_Str" + destinationFile + "String_Node_Str");
      }
    }
    if (zipInputStream != null) {
      zipInputStream.close();
    }
  }
  return files;
}

Fixed version (ground truth):
/** 
 * Unzip a file into a temporary directory. Based on http://java.sun.com/developer/technicalArticles/Programming/compression/.
 * @param zipFileName  The file to be unzipped.
 * @return the list of files that were extracted.
 * @exception IOException if the file cannot be opened, if there are problems readingthe zip file or if there are problems creating the files or directories.
 */
public static List<File> unzip(String zipFileName) throws IOException {
  BufferedOutputStream destination=null;
  final int BUFFER=2048;
  byte data[]=new byte[BUFFER];
  File topDirectoryFile=File.createTempFile("String_Node_Str","String_Node_Str");
  if (!topDirectoryFile.delete()) {
    throw new IOException("String_Node_Str" + topDirectoryFile);
  }
  if (!topDirectoryFile.mkdir()) {
    throw new IOException("String_Node_Str" + topDirectoryFile);
  }
  topDirectoryFile.deleteOnExit();
  String topDirectory=topDirectoryFile.getCanonicalPath();
  System.out.println("String_Node_Str" + topDirectory);
  List<File> files=new LinkedList<File>();
  FileInputStream fileInputStream=null;
  ZipInputStream zipInputStream=null;
  File destinationFile=null;
  try {
    fileInputStream=new FileInputStream(zipFileName);
    zipInputStream=new ZipInputStream(new BufferedInputStream(fileInputStream));
    ZipEntry entry;
    while ((entry=zipInputStream.getNextEntry()) != null) {
      String entryName=entry.getName();
      destinationFile=new File(topDirectory,entryName);
      File destinationParent=destinationFile.getParentFile();
      if (!destinationParent.isDirectory() && !destinationParent.mkdirs()) {
        throw new IOException("String_Node_Str" + destinationParent + "String_Node_Str");
      }
      if (!entry.isDirectory()) {
        try {
          FileOutputStream fos=new FileOutputStream(destinationFile);
          destination=new BufferedOutputStream(fos,BUFFER);
          int count;
          while ((count=zipInputStream.read(data,0,BUFFER)) != -1) {
            destination.write(data,0,count);
          }
          files.add(destinationFile);
        }
  finally {
          if (destination != null) {
            destination.flush();
            destination.close();
            destination=null;
          }
        }
      }
    }
  }
  finally {
    if (destination != null) {
      try {
        destination.close();
      }
 catch (      IOException ex) {
        System.out.println("String_Node_Str" + destinationFile + "String_Node_Str");
      }
    }
    if (zipInputStream != null) {
      zipInputStream.close();
    }
  }
  return files;
}