summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-05-09 15:46:32 +0200
committerBjørn Christian Seime <bjorncs@yahooinc.com>2023-05-09 15:59:59 +0200
commitad7aed9bb7b529cc98acf46763cd869523296fbc (patch)
tree1025fa907e90eefd7587b81f90ad6fbb575dc8c6 /container-search
parent9904aaf25710c6affca4140c22fa99501eb325fd (diff)
Disable string length restriction introduced in Jackson 2.15
Disable restriction only for parsers/generators which is likely to handle literals exceeding 5M
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/handler/Json2SingleLevelMap.java16
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java8
2 files changed, 20 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/handler/Json2SingleLevelMap.java b/container-search/src/main/java/com/yahoo/search/handler/Json2SingleLevelMap.java
index 7dd1772a53e..c931c6a356f 100644
--- a/container-search/src/main/java/com/yahoo/search/handler/Json2SingleLevelMap.java
+++ b/container-search/src/main/java/com/yahoo/search/handler/Json2SingleLevelMap.java
@@ -1,9 +1,12 @@
package com.yahoo.search.handler;
+import com.fasterxml.jackson.core.JsonFactoryBuilder;
import com.fasterxml.jackson.core.JsonLocation;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.StreamReadConstraints;
+import com.fasterxml.jackson.core.json.JsonReadFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.processing.IllegalInputException;
@@ -23,10 +26,11 @@ import java.util.Map;
*/
class Json2SingleLevelMap {
- private static final ObjectMapper jsonMapper = new ObjectMapper().configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
+ private static final ObjectMapper jsonMapper = createMapper();
+
private final byte [] buf;
- private final JsonParser parser;
+ private final JsonParser parser;
Json2SingleLevelMap(InputStream data) {
try {
buf = data.readAllBytes();
@@ -36,6 +40,14 @@ class Json2SingleLevelMap {
}
}
+ private static ObjectMapper createMapper() {
+ var jsonFactory = new JsonFactoryBuilder()
+ .streamReadConstraints(StreamReadConstraints.builder().maxStringLength(Integer.MAX_VALUE).build())
+ .configure(JsonReadFeature.ALLOW_SINGLE_QUOTES, true)
+ .build();
+ return new ObjectMapper(jsonFactory);
+ }
+
Map<String, String> parse() {
try {
Map<String, String> map = new HashMap<>();
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
index 90f4e6ae65c..ac3d08b2cda 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
@@ -3,7 +3,9 @@ package com.yahoo.search.rendering;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonFactoryBuilder;
import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.StreamReadConstraints;
import com.fasterxml.jackson.core.TreeNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
@@ -175,8 +177,10 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
}
private static JsonFactory createGeneratorFactory() {
- JsonFactory factory = new JsonFactory();
- factory.setCodec(new ObjectMapper().disable(FLUSH_AFTER_WRITE_VALUE));
+ var factory = new JsonFactoryBuilder()
+ .streamReadConstraints(StreamReadConstraints.builder().maxStringLength(Integer.MAX_VALUE).build())
+ .build();
+ factory.setCodec(new ObjectMapper(factory).disable(FLUSH_AFTER_WRITE_VALUE));
return factory;
}