Skip to content

Commit

Permalink
Extract reusable checkSchemeAndPort method
Browse files Browse the repository at this point in the history
Closes gh-32440
  • Loading branch information
rstoyanchev committed Mar 14, 2024
1 parent 072ebb6 commit f2fd2f1
Showing 1 changed file with 14 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {

private static final String HTTP_PATTERN = "(?i)(http|https):";

private static final String USERINFO_PATTERN = "([^@/?#]*)";
private static final String USERINFO_PATTERN = "([^/?#]*)";

private static final String HOST_IPV4_PATTERN = "[^\\[/?#:]*";
private static final String HOST_IPV4_PATTERN = "[^/?#:]*";

private static final String HOST_IPV6_PATTERN = "\\[[\\p{XDigit}:.]*[%\\p{Alnum}]*]";

Expand Down Expand Up @@ -252,9 +252,7 @@ public static UriComponentsBuilder fromUriString(String uri) {
builder.schemeSpecificPart(ssp);
}
else {
if (StringUtils.hasLength(scheme) && scheme.startsWith("http") && !StringUtils.hasLength(host)) {
throw new IllegalArgumentException("[" + uri + "] is not a valid HTTP URL");
}
checkSchemeAndHost(uri, scheme, host);
builder.userInfo(userInfo);
builder.host(host);
if (StringUtils.hasLength(port)) {
Expand Down Expand Up @@ -296,9 +294,7 @@ public static UriComponentsBuilder fromHttpUrl(String httpUrl) {
builder.scheme(scheme != null ? scheme.toLowerCase() : null);
builder.userInfo(matcher.group(4));
String host = matcher.group(5);
if (StringUtils.hasLength(scheme) && !StringUtils.hasLength(host)) {
throw new IllegalArgumentException("[" + httpUrl + "] is not a valid HTTP URL");
}
checkSchemeAndHost(httpUrl, scheme, host);
builder.host(host);
String port = matcher.group(7);
if (StringUtils.hasLength(port)) {
Expand All @@ -317,6 +313,15 @@ public static UriComponentsBuilder fromHttpUrl(String httpUrl) {
}
}

private static void checkSchemeAndHost(String uri, @Nullable String scheme, @Nullable String host) {
if (StringUtils.hasLength(scheme) && scheme.startsWith("http") && !StringUtils.hasLength(host)) {
throw new IllegalArgumentException("[" + uri + "] is not a valid HTTP URL");
}
if (StringUtils.hasLength(host) && host.startsWith("[") && !host.endsWith("]")) {
throw new IllegalArgumentException("Invalid IPV6 host in [" + uri + "]");
}
}

/**
* Create a new {@code UriComponents} object from the URI associated with
* the given HttpRequest while also overlaying with values from the headers
Expand Down Expand Up @@ -402,6 +407,7 @@ public static UriComponentsBuilder fromOriginHeader(String origin) {
if (StringUtils.hasLength(port)) {
builder.port(port);
}
checkSchemeAndHost(origin, scheme, host);
return builder;
}
else {
Expand Down

0 comments on commit f2fd2f1

Please sign in to comment.