Browse Source

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
pull/35204/merge
Brian Clozel 9 hours ago
parent
commit
df5b06dabc
  1. 2
      spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java
  2. 9
      spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

2
spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java

@ -556,7 +556,7 @@ abstract class RfcUriParser { @@ -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");
}
}

9
spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java

@ -930,4 +930,13 @@ class UriComponentsBuilderTests { @@ -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");
}
}

Loading…
Cancel
Save