From 0c347769a25c1bbf4687a1a09c3727f8064758cc Mon Sep 17 00:00:00 2001 From: izeye Date: Mon, 9 Nov 2020 20:56:23 +0900 Subject: [PATCH] Fix wrong reference in UrlPathHelper.removeSemicolonContentInternal() This commit also changes to short-circuit when `slashIndex` is -1. --- .../main/java/org/springframework/web/util/UrlPathHelper.java | 4 ++-- .../java/org/springframework/web/util/UrlPathHelperTests.java | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java b/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java index 06b3c243a9..5c8ff3e4c6 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java +++ b/spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java @@ -618,9 +618,9 @@ public class UrlPathHelper { } StringBuilder sb = new StringBuilder(requestUri); while (semicolonIndex != -1) { - int slashIndex = requestUri.indexOf('/', semicolonIndex + 1); + int slashIndex = sb.indexOf("/", semicolonIndex + 1); if (slashIndex == -1) { - slashIndex = sb.length(); + return sb.substring(0, semicolonIndex); } sb.delete(semicolonIndex, slashIndex); semicolonIndex = sb.indexOf(";", semicolonIndex); diff --git a/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java b/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java index 235d7fe428..695a5ad4fb 100644 --- a/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/UrlPathHelperTests.java @@ -115,6 +115,9 @@ public class UrlPathHelperTests { request.setRequestURI("/foo;f=F;o=O;o=O/bar;b=B;a=A;r=R"); assertThat(helper.getRequestUri(request)).isEqualTo("/foo/bar"); + request.setRequestURI("/foo;f=F;o=O;o=O/bar;b=B;a=A;r=R/baz;test"); + assertThat(helper.getRequestUri(request)).isEqualTo("/foo/bar/baz"); + // SPR-13455 request.setRequestURI("/foo/;test/1"); request.setServletPath("/foo/1");