From 5b4bd617204728c4910e45fde44ac46d0f5672d4 Mon Sep 17 00:00:00 2001 From: yokotaso Date: Fri, 8 Mar 2024 16:41:40 +0900 Subject: [PATCH] Fix possible NullPointerException from getPermission() Fix regression in `JarUrlConnection` where a NullPointerException could be thrown internally causing performance issues. When the SecurityManager is present, the following stack trace is thrown: java.lang.NullPointerException: Cannot invoke "java.net.URLConnection.getPermission()" because "this.jarFileConnection" is null at org.springframework.boot.loader.net.protocol.jar.JarUrlConnection.getPermission(JarUrlConnection.java:175) at java.base/jdk.internal.loader.URLClassPath.check(URLClassPath.java:553) at java.base/jdk.internal.loader.URLClassPath$Loader.findResource(URLClassPath.java:612) at java.base/jdk.internal.loader.URLClassPath.findResource(URLClassPath.java:296) at java.base/java.net.URLClassLoader$2.run(URLClassLoader.java:629) at java.base/java.net.URLClassLoader$2.run(URLClassLoader.java:627) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.net.URLClassLoader.findResource(URLClassLoader.java:626) at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.findResource(JarUrlClassLoader.java:70) at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1403) at java.base/java.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:290) at java.base/java.lang.Class.getResourceAsStream(Class.java:2850) See gh-39856 --- .../boot/loader/net/protocol/jar/JarUrlConnection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/jar/JarUrlConnection.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/jar/JarUrlConnection.java index c39bd37a44fd..b95965447e62 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/jar/JarUrlConnection.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/jar/JarUrlConnection.java @@ -172,7 +172,7 @@ public Object getContent() throws IOException { @Override public Permission getPermission() throws IOException { - return this.jarFileConnection.getPermission(); + return (this.jarFileConnection != null) ? this.jarFileConnection.getPermission() : null; } @Override