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