summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2020-09-09 22:36:39 +0200
committerGitHub <noreply@github.com>2020-09-09 22:36:39 +0200
commit11c56a4292f419c29965c53673067ea0f4350f09 (patch)
treeb42b2ad6a7bf86818dce41cea2783ac2d76aefb4
parent4058c7b864ee6481703bd439ff4797041eb89018 (diff)
parentacd4540bd446530fd682b749d590f6681efcba63 (diff)
Merge pull request #14357 from vespa-engine/jonmv/accept-default-port-being-hidden-by-java-URI
Handle default port for http and https being hidden by java URI MERGEOK
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java14
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java4
2 files changed, 14 insertions, 4 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java
index 9b1b1e087db..86aa9b994f9 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactory.java
@@ -55,14 +55,24 @@ class HttpRequestFactory {
builder.append('?').append(query);
}
URI uri = URI.create(builder.toString());
- if ( ! scheme.equals(uri.getScheme()) || ! host.equals(uri.getHost()) || port != uri.getPort())
- throw new IllegalArgumentException("Bad scheme, host or port");
+ validateSchemeHostPort(scheme, host, port, uri);
return uri;
} catch (IllegalArgumentException e) {
throw createBadQueryException(e);
}
}
+ private static void validateSchemeHostPort(String scheme, String host, int port, URI uri) {
+ if ( ! scheme.equals(uri.getScheme()))
+ throw new IllegalArgumentException("Bad scheme: " + scheme);
+
+ if ( ! host.equals(uri.getHost()))
+ throw new IllegalArgumentException("Bad host: " + host);
+
+ if (port != uri.getPort() && ! (port == 80 && scheme.equals("http")) && ! (port == 443 && scheme.equals("https")))
+ throw new IllegalArgumentException("Bad port: " + port);
+ }
+
private static RequestException createBadQueryException(IllegalArgumentException e) {
return new RequestException(Response.Status.BAD_REQUEST, "Query violates RFC 2396: " + e.getMessage(), e);
}
diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java
index 27dd4429024..588bbaf73fb 100644
--- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java
+++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java
@@ -30,7 +30,7 @@ import static org.mockito.Mockito.when;
*/
public class HttpRequestFactoryTest {
- private static final int LOCAL_PORT = 8080;
+ private static final int LOCAL_PORT = 80;
@Test
public final void testIllegalQuery() {
@@ -97,7 +97,7 @@ public class HttpRequestFactoryTest {
public void request_uri_uses_local_port() {
HttpRequest request = HttpRequestFactory.newJDiscRequest(
new MockContainer(),
- createMockRequest("http", "example.com", "/search", "query=value"));
+ createMockRequest("https", "example.com", "/search", "query=value"));
assertEquals(LOCAL_PORT, request.getUri().getPort());
}