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"); + } + }