From c5de5c99390a69f23e7682b7748c273b01a63907 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 8 Nov 2021 21:21:54 +0000 Subject: [PATCH 1/3] Update Javadoc of LogFormatUtils Closes gh-27632 --- .../java/org/springframework/core/log/LogFormatUtils.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.java b/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.java index e3ae033e9f..51ffd98cf0 100644 --- a/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.java +++ b/spring-core/src/main/java/org/springframework/core/log/LogFormatUtils.java @@ -36,8 +36,9 @@ import org.springframework.lang.Nullable; public abstract class LogFormatUtils { /** - * Variant of {@link #formatValue(Object, int, boolean)} and a convenience - * method that truncates at 100 characters when {@code limitLength} is set. + * Convenience variant of {@link #formatValue(Object, int, boolean)} that + * limits the length of a log message to 100 characters and also replaces + * newline characters if {@code limitLength} is set to "true". * @param value the value to format * @param limitLength whether to truncate the value at a length of 100 * @return the formatted value From b5743966d6d926ed9b146ca4c34713b406628038 Mon Sep 17 00:00:00 2001 From: happyWilliam0 Date: Fri, 29 Oct 2021 14:14:05 +0800 Subject: [PATCH 2/3] Improve efficiency of UrlPathHelper#getSanitizedPath See gh-27623 --- .../web/util/UrlPathHelper.java | 21 ++++++++++--------- .../web/util/UrlPathHelperTests.java | 6 ++++++ 2 files changed, 17 insertions(+), 10 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 e38fdff9b5..a4a85e707b 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 @@ -405,16 +405,17 @@ public class UrlPathHelper { * */ private static String getSanitizedPath(final String path) { - int index = path.indexOf("//"); - if (index >= 0) { - StringBuilder sanitized = new StringBuilder(path); - while (index != -1) { - sanitized.deleteCharAt(index); - index = sanitized.indexOf("//", index); - } - return sanitized.toString(); + if (path.length() == 0) { + return path; } - return path; + char[] arr = path.toCharArray(); + int slowIndex = 0; + for (int fastIndex = 1; fastIndex < arr.length; fastIndex++) { + if (arr[fastIndex] != '/' || arr[slowIndex] != '/') { + arr[++slowIndex] = arr[fastIndex]; + } + } + return new String(arr, 0, slowIndex + 1); } /** @@ -532,7 +533,7 @@ public class UrlPathHelper { */ public String getOriginatingQueryString(HttpServletRequest request) { if ((request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE) != null) || - (request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE) != null)) { + (request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE) != null)) { return (String) request.getAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE); } else { 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 e3281e5527..49d8ed6a07 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 @@ -246,6 +246,12 @@ class UrlPathHelperTests { request.setRequestURI("/SPR-12372/foo/bar//"); assertThat(helper.getLookupPathForRequest(request)).isEqualTo("/foo/bar//"); + + // "enhance" case + request.setServletPath("/foo/bar//"); + request.setRequestURI("/SPR-12372////////////////////////foo//////////////////bar////////////////////"); + + assertThat(helper.getLookupPathForRequest(request)).isEqualTo("/foo/bar//"); } @Test From c6ce65ef564dfb89944ae07dd3a2c25f28fc287f Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 9 Nov 2021 09:45:35 +0000 Subject: [PATCH 3/3] Polishing contribution Closes gh-27623 --- .../springframework/web/util/UrlPathHelper.java | 15 ++++++++------- .../web/util/UrlPathHelperTests.java | 4 ++-- 2 files changed, 10 insertions(+), 9 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 a4a85e707b..685f376b42 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 @@ -405,17 +405,18 @@ public class UrlPathHelper { * */ private static String getSanitizedPath(final String path) { - if (path.length() == 0) { + int start = path.indexOf("//"); + if (start == -1) { return path; } - char[] arr = path.toCharArray(); - int slowIndex = 0; - for (int fastIndex = 1; fastIndex < arr.length; fastIndex++) { - if (arr[fastIndex] != '/' || arr[slowIndex] != '/') { - arr[++slowIndex] = arr[fastIndex]; + char[] content = path.toCharArray(); + int slowIndex = start; + for (int fastIndex = start + 1; fastIndex < content.length; fastIndex++) { + if (content[fastIndex] != '/' || content[slowIndex] != '/') { + content[++slowIndex] = content[fastIndex]; } } - return new String(arr, 0, slowIndex + 1); + return new String(content, 0, slowIndex + 1); } /** 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 49d8ed6a07..e7ef050837 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 @@ -232,12 +232,12 @@ class UrlPathHelperTests { request.setContextPath("/SPR-12372"); request.setPathInfo(null); request.setServletPath("/foo/bar/"); - request.setRequestURI("/SPR-12372/foo//bar/"); + request.setRequestURI("/SPR-12372/foo///bar/"); assertThat(helper.getLookupPathForRequest(request)).isEqualTo("/foo/bar/"); request.setServletPath("/foo/bar/"); - request.setRequestURI("/SPR-12372/foo/bar//"); + request.setRequestURI("////SPR-12372/foo/bar//"); assertThat(helper.getLookupPathForRequest(request)).isEqualTo("/foo/bar/");