mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Don't close early when SecurityManager present
Update `JarFile` and `JarFileWrapper` classes so that they no longer close the `JarFile` early if a `SecurityManager` is in use. Prior to this commit, the closed `JarFile` would cause (an ultimately swallowed) NPE in `ZipFile` which manifested itself as a `ClassNotFoundException` when starting the app. Closes gh-25538
This commit is contained in:
parent
d0e2925dcc
commit
1beee5700c
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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,
|
private JarFile(RandomAccessDataFile rootFile, String pathFromRoot, RandomAccessData data, JarEntryFilter filter,
|
||||||
JarFileType type, Supplier<Manifest> manifestSupplier) throws IOException {
|
JarFileType type, Supplier<Manifest> manifestSupplier) throws IOException {
|
||||||
super(rootFile.getFile());
|
super(rootFile.getFile());
|
||||||
super.close();
|
if (System.getSecurityManager() == null) {
|
||||||
|
super.close();
|
||||||
|
}
|
||||||
this.rootFile = rootFile;
|
this.rootFile = rootFile;
|
||||||
this.pathFromRoot = pathFromRoot;
|
this.pathFromRoot = pathFromRoot;
|
||||||
CentralDirectoryParser parser = new CentralDirectoryParser();
|
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);
|
this.data = parser.parse(data, filter == null);
|
||||||
}
|
}
|
||||||
catch (RuntimeException ex) {
|
catch (RuntimeException ex) {
|
||||||
close();
|
try {
|
||||||
|
this.rootFile.close();
|
||||||
|
super.close();
|
||||||
|
}
|
||||||
|
catch (IOException ioex) {
|
||||||
|
}
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
this.manifestSupplier = (manifestSupplier != null) ? manifestSupplier : () -> {
|
this.manifestSupplier = (manifestSupplier != null) ? manifestSupplier : () -> {
|
||||||
@ -337,10 +344,11 @@ public class JarFile extends AbstractJarFile implements Iterable<java.util.jar.J
|
|||||||
if (this.closed) {
|
if (this.closed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.closed = true;
|
super.close();
|
||||||
if (this.type == JarFileType.DIRECT) {
|
if (this.type == JarFileType.DIRECT) {
|
||||||
this.rootFile.close();
|
this.rootFile.close();
|
||||||
}
|
}
|
||||||
|
this.closed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureOpen() {
|
private void ensureOpen() {
|
||||||
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -40,7 +40,9 @@ class JarFileWrapper extends AbstractJarFile {
|
|||||||
JarFileWrapper(JarFile parent) throws IOException {
|
JarFileWrapper(JarFile parent) throws IOException {
|
||||||
super(parent.getRootJarFile().getFile());
|
super(parent.getRootJarFile().getFile());
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
super.close();
|
if (System.getSecurityManager() == null) {
|
||||||
|
super.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user