From 4083c721f2ee2ce54c624488a49ed08f7c3b3c39 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 1 Jul 2019 15:06:18 +0100 Subject: [PATCH] Fix URL normalization when replacing /./ with / Previously, a regular expression of /./ was used to replace /./ with /. The '.'' in the expression matches any single character so the replacement was more broadly applicable than it should have been. For example, /a/ would be replaced with /. This commit uses Pattern.LITERAL to compile the regular expression from the CURRENT_DIR (/./) contant. This allows the constant to be used to check for occurances of /./ in the string before attempting replacement, while also ensuring that the '.' is treated literally. Closes gh-17341 --- .../java/org/springframework/boot/loader/jar/Handler.java | 2 +- .../org/springframework/boot/loader/jar/HandlerTests.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java index e6a7b59981c..6829eca65c1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/Handler.java @@ -51,7 +51,7 @@ public class Handler extends URLStreamHandler { private static final String CURRENT_DIR = "/./"; - private static final Pattern CURRENT_DIR_PATTERN = Pattern.compile(CURRENT_DIR); + private static final Pattern CURRENT_DIR_PATTERN = Pattern.compile(CURRENT_DIR, Pattern.LITERAL); private static final String PARENT_DIR = "/../"; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/HandlerTests.java b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/HandlerTests.java index 4cfacb28ace..52bfa43c916 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/HandlerTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/HandlerTests.java @@ -130,7 +130,7 @@ public class HandlerTests { @Test public void urlWithSpecReferencingParentDirectory() throws MalformedURLException { assertStandardAndCustomHandlerUrlsAreEqual("file:/test.jar!/BOOT-INF/classes!/xsd/folderA/a.xsd", - "../folderB/b.xsd"); + "../folderB/c/d/e.xsd"); } @Test @@ -142,7 +142,7 @@ public class HandlerTests { @Test public void urlWithSpecReferencingCurrentDirectory() throws MalformedURLException { assertStandardAndCustomHandlerUrlsAreEqual("file:/test.jar!/BOOT-INF/classes!/xsd/folderA/a.xsd", - "./folderB/./b.xsd"); + "./folderB/c/d/e.xsd"); } @Test