From 592501351a3fc4a9e92bf2d15def78d2f8a4bce0 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 13 May 2023 21:28:56 +0100 Subject: [PATCH 1/5] allow override of StreamReadContraints default --- .../jackson/core/StreamReadConstraints.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java index cbb885263b..77740c806a 100644 --- a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java +++ b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java @@ -54,9 +54,32 @@ public class StreamReadConstraints protected final int _maxNumLen; protected final int _maxStringLen; - private static final StreamReadConstraints DEFAULT = + private static StreamReadConstraints DEFAULT = new StreamReadConstraints(DEFAULT_MAX_DEPTH, DEFAULT_MAX_NUM_LEN, DEFAULT_MAX_STRING_LEN); + /** + * Override the default StreamReadConstraints. These defaults are only used when {@link JsonFactory} + * instances are not configured with their own StreamReadConstraints. + *

+ * Library maintainers should not set this as it will affect other code that uses Jackson. + * Library maintainers should configure the ObjectMappers that they create using a + * {@link JsonFactory} instance. + * This method is meant for users delivering applications. If they use this, they set it when they start + * their application to avoid having other code initialize their mappers before the defaults are overridden. + * + * @param streamReadConstraints new default for StreamReadConstraints (a null value will reset to built-in default) + * @see #defaults() + * @see #builder() + * @since v2.15.1 + */ + public static void overrideDefaultStreamReadConstraints(final StreamReadConstraints streamReadConstraints) { + if (streamReadConstraints == null) { + DEFAULT = new StreamReadConstraints(DEFAULT_MAX_DEPTH, DEFAULT_MAX_NUM_LEN, DEFAULT_MAX_STRING_LEN); + } else { + DEFAULT = streamReadConstraints; + } + } + public static final class Builder { private int maxNestingDepth; private int maxNumLen; From 351af90f7b71337a842466727e75c42fad491842 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 13 May 2023 21:33:47 +0100 Subject: [PATCH 2/5] Update StreamReadConstraints.java --- .../com/fasterxml/jackson/core/StreamReadConstraints.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java index 77740c806a..aa6c5e4192 100644 --- a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java +++ b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java @@ -62,8 +62,10 @@ public class StreamReadConstraints * instances are not configured with their own StreamReadConstraints. *

* Library maintainers should not set this as it will affect other code that uses Jackson. - * Library maintainers should configure the ObjectMappers that they create using a - * {@link JsonFactory} instance. + * Library maintainers who want to configure StreamReadConstraints for the Jackson usage within their + * lib should create ObjectMapper instances that have a {@link JsonFactory} instance with + * the required StreamReadConstraints. + *

* This method is meant for users delivering applications. If they use this, they set it when they start * their application to avoid having other code initialize their mappers before the defaults are overridden. * From dec0a5e2fdca9be929d3c71ade8b9a865f1b81a7 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sat, 13 May 2023 21:51:25 +0100 Subject: [PATCH 3/5] Update StreamReadConstraints.java --- .../com/fasterxml/jackson/core/StreamReadConstraints.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java index aa6c5e4192..c64f0591c4 100644 --- a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java +++ b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java @@ -181,6 +181,10 @@ public static Builder builder() { return new Builder(); } + /** + * @return the default {@link StreamReadConstraints} (when none is set on the {@link JsonFactory} explicitly) + * @see #overrideDefaultStreamReadConstraints + */ public static StreamReadConstraints defaults() { return DEFAULT; } From 2ad7114f2dcad891d27917bccc52eefaf2fa9d46 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 19 May 2023 09:18:14 +0100 Subject: [PATCH 4/5] Update StreamReadConstraints.java --- .../java/com/fasterxml/jackson/core/StreamReadConstraints.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java index c5595aadca..c61793e699 100644 --- a/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java +++ b/src/main/java/com/fasterxml/jackson/core/StreamReadConstraints.java @@ -75,7 +75,7 @@ public class StreamReadConstraints * @param streamReadConstraints new default for StreamReadConstraints (a null value will reset to built-in default) * @see #defaults() * @see #builder() - * @since v2.15.1 + * @since v2.15.2 */ public static void overrideDefaultStreamReadConstraints(final StreamReadConstraints streamReadConstraints) { if (streamReadConstraints == null) { From 43f0a5de6c295eac503b6f5d74ddcf8cd64cda8c Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 19 May 2023 13:52:40 +0100 Subject: [PATCH 5/5] Create TestStreamReadConstraints.java --- .../core/TestStreamReadConstraints.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/test/java/com/fasterxml/jackson/core/TestStreamReadConstraints.java diff --git a/src/test/java/com/fasterxml/jackson/core/TestStreamReadConstraints.java b/src/test/java/com/fasterxml/jackson/core/TestStreamReadConstraints.java new file mode 100644 index 0000000000..e38864bb33 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/core/TestStreamReadConstraints.java @@ -0,0 +1,33 @@ +package com.fasterxml.jackson.core; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TestStreamReadConstraints { + @Test + public void testOverride() { + final int numLen = 1234; + final int strLen = 12345; + final int depth = 123; + StreamReadConstraints constraints = StreamReadConstraints.builder() + .maxNumberLength(numLen) + .maxStringLength(strLen) + .maxNestingDepth(depth) + .build(); + try { + StreamReadConstraints.overrideDefaultStreamReadConstraints(constraints); + assertEquals(depth, StreamReadConstraints.defaults().getMaxNestingDepth()); + assertEquals(strLen, StreamReadConstraints.defaults().getMaxStringLength()); + assertEquals(numLen, StreamReadConstraints.defaults().getMaxNumberLength()); + } finally { + StreamReadConstraints.overrideDefaultStreamReadConstraints(null); + assertEquals(StreamReadConstraints.DEFAULT_MAX_DEPTH, + StreamReadConstraints.defaults().getMaxNestingDepth()); + assertEquals(StreamReadConstraints.DEFAULT_MAX_STRING_LEN, + StreamReadConstraints.defaults().getMaxStringLength()); + assertEquals(StreamReadConstraints.DEFAULT_MAX_NUM_LEN, + StreamReadConstraints.defaults().getMaxNumberLength()); + } + } +}