summaryrefslogtreecommitdiffstats
path: root/vespaclient-container-plugin
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-10-14 09:15:56 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-10-14 09:15:56 +0200
commit8959673839e959ff48d4ce1961888791ff4e4346 (patch)
treeb07dcff64efb547c803b7b51ae87f19c44de45b2 /vespaclient-container-plugin
parent320d24ac771ed013a3d4fc408b4ca77a0f294e02 (diff)
Be stricter about request property parsing (and test this)
Diffstat (limited to 'vespaclient-container-plugin')
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java10
-rw-r--r--vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java9
2 files changed, 16 insertions, 3 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
index 36bec39d10c..3158c4e31be 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
@@ -995,11 +995,15 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
// ------------------------------------------------ Helpers ------------------------------------------------
private static Optional<String> getProperty(HttpRequest request, String name) {
+ if ( ! request.parameters().containsKey(name))
+ return Optional.empty();
+
List<String> values = request.parameters().get(name);
- if (values != null && values.size() != 0)
- return Optional.ofNullable(values.get(values.size() - 1));
+ String value;
+ if (values == null || values.isEmpty() || (value = values.get(values.size() - 1)) == null || value.isEmpty())
+ throw new IllegalArgumentException("Expected non-empty value for request property '" + name + "'");
- return Optional.empty();
+ return Optional.of(value);
}
private static <T> Optional<T> getProperty(HttpRequest request, String name, Parser<T> parser) {
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
index da09d076728..e10b162078a 100644
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
@@ -384,6 +384,15 @@ public class DocumentV1ApiTest {
"}", response.readAll());
assertEquals(200, response.getStatus());
+ // GET with empty route is a 400
+ access.session.expect((__, ___) -> { throw new AssertionError("Not supposed to happen"); });
+ response = driver.sendRequest("http://localhost/document/v1/space/music/number/1/two?route=", DELETE);
+ assertSameJson("{" +
+ " \"pathId\": \"/document/v1/space/music/number/1/two\"," +
+ " \"message\": \"Expected non-empty value for request property 'route'\"" +
+ "}", response.readAll());
+ assertEquals(400, response.getStatus());
+
// GET with non-existent cluster is a 400
access.session.expect((__, ___) -> { throw new AssertionError("Not supposed to happen"); });
response = driver.sendRequest("http://localhost/document/v1/space/music/number/1/two?cluster=throw-me");