|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright 2012-2020 the original author or authors.
|
|
|
|
|
* Copyright 2012-2021 the original author or authors.
|
|
|
|
|
*
|
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
@ -126,7 +126,9 @@ public class JarFile extends AbstractJarFile implements Iterable<java.util.jar.J
|
|
|
|
|
private JarFile(RandomAccessDataFile rootFile, String pathFromRoot, RandomAccessData data, JarEntryFilter filter,
|
|
|
|
|
JarFileType type, Supplier<Manifest> manifestSupplier) throws IOException {
|
|
|
|
|
super(rootFile.getFile());
|
|
|
|
|
super.close();
|
|
|
|
|
if (System.getSecurityManager() == null) {
|
|
|
|
|
super.close();
|
|
|
|
|
}
|
|
|
|
|
this.rootFile = rootFile;
|
|
|
|
|
this.pathFromRoot = pathFromRoot;
|
|
|
|
|
CentralDirectoryParser parser = new CentralDirectoryParser();
|
|
|
|
@ -137,7 +139,12 @@ public class JarFile extends AbstractJarFile implements Iterable<java.util.jar.J
|
|
|
|
|
this.data = parser.parse(data, filter == null);
|
|
|
|
|
}
|
|
|
|
|
catch (RuntimeException ex) {
|
|
|
|
|
close();
|
|
|
|
|
try {
|
|
|
|
|
this.rootFile.close();
|
|
|
|
|
super.close();
|
|
|
|
|
}
|
|
|
|
|
catch (IOException ioex) {
|
|
|
|
|
}
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
this.manifestSupplier = (manifestSupplier != null) ? manifestSupplier : () -> {
|
|
|
|
@ -337,10 +344,11 @@ public class JarFile extends AbstractJarFile implements Iterable<java.util.jar.J
|
|
|
|
|
if (this.closed) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.closed = true;
|
|
|
|
|
super.close();
|
|
|
|
|
if (this.type == JarFileType.DIRECT) {
|
|
|
|
|
this.rootFile.close();
|
|
|
|
|
}
|
|
|
|
|
this.closed = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ensureOpen() {
|
|
|
|
|