From 91a0c28fa9c200c89d246f84c77b6fbb84f6d290 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 ec0b7f629b9..7482989ca34 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 @@ -563,7 +563,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 b0df33c69d8..2fe009b0abc 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 @@ -914,4 +914,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"); + } + }