From 2128a84492880ddde7599f4eba48bf90ee8843e5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 23 Jun 2025 10:34:56 -0700 Subject: [PATCH] Never attempt to resolve local address for nested URLs Update `nested:` Handler to always return `null` from `getHostAddress` in an attempt to improve performance on Windows. Fixes gh-46063 --- .../boot/loader/net/protocol/nested/Handler.java | 8 ++++++++ .../boot/loader/net/protocol/nested/HandlerTests.java | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/nested/Handler.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/nested/Handler.java index 3497ec64e2f..173658d26e0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/nested/Handler.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/net/protocol/nested/Handler.java @@ -17,6 +17,7 @@ package org.springframework.boot.loader.net.protocol.nested; import java.io.IOException; +import java.net.InetAddress; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; @@ -35,6 +36,13 @@ public class Handler extends URLStreamHandler { private static final String PREFIX = "nested:"; + @Override + protected InetAddress getHostAddress(URL url) { + // Some Windows users have reported that calls to java.net.URL.getHostAddress() + // can be slow. Since we only deal with local files we always return null here. + return null; + } + @Override protected URLConnection openConnection(URL url) throws IOException { return new NestedUrlConnection(url); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/net/protocol/nested/HandlerTests.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/net/protocol/nested/HandlerTests.java index a53ddbeb65f..722276ad763 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/net/protocol/nested/HandlerTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/net/protocol/nested/HandlerTests.java @@ -68,4 +68,11 @@ class HandlerTests { assertThatNoException().isThrownBy(() -> Handler.assertUrlIsNotMalformed(url)); } + @Test + void getHostAddressIsNull() throws Exception { + // gh-46063 + String url = "nested:" + this.temp.getAbsolutePath() + "/!nested.jar"; + assertThat(new Handler().getHostAddress(new URL(url))).isNull(); + } + }