From df5b06dabc5e2de67eac05f17f081ed1a55bee6f Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Wed, 17 Dec 2025 09:51:53 +0100 Subject: [PATCH] Fix RfcUriParser parsing for single char fragments Prior to this commit, the `RfcUriParser` would ignore URI fragments if their length is < 2. This commit fixes the length check to allow for single char fragments when parsing URIs. Fixes gh-36029 --- .../java/org/springframework/web/util/RfcUriParser.java | 2 +- .../web/util/UriComponentsBuilderTests.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java b/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java index 18e5b4f5fa4..37d3bf0936c 100644 --- a/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java +++ b/spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java @@ -556,7 +556,7 @@ abstract class RfcUriParser { } public void captureFragmentIfNotEmpty() { - if (this.index > this.componentIndex + 1) { + if (this.index > this.componentIndex) { this.fragment = captureComponent("fragment"); } } diff --git a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java index 991b91801d7..7bce9132fc7 100644 --- a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java @@ -930,4 +930,13 @@ class UriComponentsBuilderTests { assertThat(uri.toString()).isEqualTo("ws://localhost:7777/test"); } + @ParameterizedTest // gh-36029 + @EnumSource + void singleCharFragment(ParserType parserType) { + URI uri = UriComponentsBuilder + .fromUriString("https://localhost/resource#a", parserType) + .build().toUri(); + assertThat(uri.toString()).isEqualTo("https://localhost/resource#a"); + } + }