From e25842babbfb9cf15949b2c53521cceedbf9cf19 Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Fri, 5 May 2023 15:02:20 -0400 Subject: [PATCH] core#1015 non-blocking smile parser respects CANONICALIZE_FIELD_NAMES --- .../jackson/dataformat/smile/SmileFactory.java | 2 +- .../smile/async/NonBlockingParserBase.java | 4 ++++ .../smile/SmileFactoryPropertiesTest.java | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java index e17ded340..40a0d4104 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java @@ -414,7 +414,7 @@ public NonBlockingByteArrayParser createNonBlockingByteArrayParser() throws IOEx IOContext ctxt = _createContext(null, false); // 13-Mar-2021, tatu: [dataformats-binary#252] Leave async parser with // always-canonicalizing, for now (2.13) -- to be improved in future - ByteQuadsCanonicalizer can = _byteSymbolCanonicalizer.makeChild(_factoryFeatures); + ByteQuadsCanonicalizer can = _byteSymbolCanonicalizer.makeChildOrPlaceholder(_factoryFeatures); return new NonBlockingByteArrayParser(ctxt, _parserFeatures, _smileParserFeatures, can); } diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java index fb2143980..77d76c73a 100644 --- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java +++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserBase.java @@ -531,6 +531,10 @@ private final String _findDecodedLonger(byte[] inBuf, int inPtr, int len) throws protected final String _addDecodedToSymbols(int len, String name) throws IOException { + // 5-May-2023, ckozak: [core#1015] respect CANONICALIZE_FIELD_NAMES factory config. + if (!_symbolsCanonical) { + return name; + } if (len < 5) { return _symbols.addName(name, _quad1); } diff --git a/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileFactoryPropertiesTest.java b/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileFactoryPropertiesTest.java index 61a0c597d..e3f88b649 100644 --- a/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileFactoryPropertiesTest.java +++ b/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileFactoryPropertiesTest.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.core.io.IOContext; import com.fasterxml.jackson.core.io.ContentReference; +import com.fasterxml.jackson.dataformat.smile.async.NonBlockingByteArrayParser; import static org.junit.Assert.assertArrayEquals; @@ -153,6 +154,20 @@ public void testGeneratorConstruction() throws Exception g.close(); } + public void testCanonicalization() throws Exception + { + try (NonBlockingByteArrayParser parser = new SmileFactory() + .createNonBlockingByteArrayParser()) { + assertTrue(parser._symbolsCanonical); + } + try (NonBlockingByteArrayParser parser = SmileFactory.builder() + .disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES) + .build() + .createNonBlockingByteArrayParser()) { + assertFalse(parser._symbolsCanonical); + } + } + /* /********************************************************** /* Helper methods