Program: 28846
Project: 28846
Buggy source:
/** 
 * Explodes files as usual, and then explodes every jar file found. All explosions are copied relative the same root directory.<p>It does a case-sensitive check for files that end with ".jar" will comment out for later possbile use public ArrayList explodeAll() throws ZipFileException { return doExplode(this); }
 */
public ArrayList<String> explode() throws ZipFileException {
  files=new ArrayList<String>();
  ZipInputStream zin=null;
  BufferedOutputStream bos=null;
  try {
    zin=zipStream;
    ZipEntry ze;
    while ((ze=zin.getNextEntry()) != null) {
      String filename=ze.getName();
      File fullpath=null;
      if (isDirectory(filename)) {
        fullpath=new File(explodeDir,filename.substring(0,filename.length() - 1));
        fullpath.mkdirs();
        continue;
      }
      fullpath=new File(explodeDir,filename);
      File newDir=fullpath.getParentFile();
      if (!newDir.mkdirs()) {
        _utillogger.log(Level.FINE,"String_Node_Str" + newDir);
      }
      if (fullpath.delete()) {
        if (_utillogger.isLoggable(Level.FINE)) {
          _utillogger.log(Level.FINE,"String_Node_Str" + fullpath.getAbsolutePath() + "String_Node_Str"+ (zipFile != null ? ("String_Node_Str" + zipFile.getAbsolutePath()) : "String_Node_Str"));
        }
      }
      File f=new File(explodeDir,filename);
      if (f.isDirectory()) {
        continue;
      }
      bos=new BufferedOutputStream(getOutputStream(f),BUFFER_SIZE);
      int totalBytes=0;
      for (int numBytes=zin.read(buffer); numBytes > 0; numBytes=zin.read(buffer)) {
        bos.write(buffer,0,numBytes);
        totalBytes+=numBytes;
      }
      bos.close();
      bos=null;
      files.add(filename);
    }
  }
 catch (  IOException e) {
    throw new ZipFileException(e);
  }
 finally {
    if (bos != null) {
      try {
        bos.close();
      }
 catch (      IOException e) {
      }
    }
    try {
      zin.close();
    }
 catch (    IOException e) {
      throw new ZipFileException("String_Node_Str" + e);
    }
  }
  return files;
}

Fixed version (ground truth):
/** 
 * Explodes files as usual, and then explodes every jar file found. All explosions are copied relative the same root directory.<p>It does a case-sensitive check for files that end with ".jar" will comment out for later possbile use public ArrayList explodeAll() throws ZipFileException { return doExplode(this); }
 */
public ArrayList<String> explode() throws ZipFileException {
  files=new ArrayList<String>();
  ZipInputStream zin=null;
  BufferedOutputStream bos=null;
  try {
    zin=zipStream;
    ZipEntry ze;
    while ((ze=zin.getNextEntry()) != null) {
      String filename=ze.getName();
      File fullpath;
      if (isDirectory(filename)) {
        fullpath=new File(explodeDir,filename.substring(0,filename.length() - 1));
        if (!fullpath.mkdirs()) {
          throw new IOException("String_Node_Str" + fullpath);
        }
        continue;
      }
      fullpath=new File(explodeDir,filename);
      File newDir=fullpath.getParentFile();
      if (!newDir.mkdirs()) {
        _utillogger.log(Level.FINE,"String_Node_Str",newDir);
      }
      if (fullpath.delete()) {
        if (_utillogger.isLoggable(Level.FINE)) {
          _utillogger.log(Level.FINE,"String_Node_Str",new Object[]{fullpath.getAbsolutePath(),zipFile != null ? ("String_Node_Str" + zipFile.getAbsolutePath()) : "String_Node_Str"});
        }
      }
      File f=new File(explodeDir,filename);
      if (f.isDirectory()) {
        continue;
      }
      bos=new BufferedOutputStream(getOutputStream(f),BUFFER_SIZE);
      int totalBytes=0;
      for (int numBytes=zin.read(buffer); numBytes > 0; numBytes=zin.read(buffer)) {
        bos.write(buffer,0,numBytes);
        totalBytes+=numBytes;
      }
      bos.close();
      bos=null;
      files.add(filename);
    }
  }
 catch (  IOException e) {
    throw new ZipFileException(e);
  }
 finally {
    if (bos != null) {
      try {
        bos.close();
      }
 catch (      IOException e) {
      }
    }
    try {
      if (zin != null) {
        zin.close();
      }
    }
 catch (    IOException e) {
      throw new ZipFileException("String_Node_Str" + e);
    }
  }
  return files;
}