diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-05-09 15:46:32 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-05-09 15:59:59 +0200 |
commit | ad7aed9bb7b529cc98acf46763cd869523296fbc (patch) | |
tree | 1025fa907e90eefd7587b81f90ad6fbb575dc8c6 /container-search | |
parent | 9904aaf25710c6affca4140c22fa99501eb325fd (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.java | 16 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java | 8 |
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; } |