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 c87c2a7b123..3198e93590a 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 @@ -241,12 +241,16 @@ abstract class RfcUriParser { parser.index(++i); parser.captureHost(); if (parser.hasNext()) { - if (parser.charAtIndex() == ':') { + char next = parser.charAtIndex(); + if (next == ':') { parser.advanceTo(PORT, i + 1); } - else { + else if (next == '/') { parser.advanceTo(PATH, i); } + else { + fail(parser, "Bad authority"); + } } break; case ':': 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 e8729d97d9b..fc0a40a54c3 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 @@ -267,7 +267,10 @@ class UriComponentsBuilderTests { @EnumSource void fromUriStringInvalidIPv6Host(ParserType parserType) { assertThatIllegalArgumentException().isThrownBy(() -> - UriComponentsBuilder.fromUriString("http://[1abc:2abc:3abc::5ABC:6abc:8080/resource", parserType)); + UriComponentsBuilder.fromUriString("https://[1abc:2abc:3abc::5ABC:6abc:8080/resource", parserType)); + + assertThatIllegalArgumentException().isThrownBy(() -> + UriComponentsBuilder.fromUriString("https://[1abc:2abc:3abc::5ABC:6abc]resource", parserType)); } @ParameterizedTest // gh-36759