Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package jackson-core for openSUSE:Factory checked in at 2021-01-26 14:46:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/jackson-core (Old) and /work/SRC/openSUSE:Factory/.jackson-core.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "jackson-core" Tue Jan 26 14:46:31 2021 rev:5 rq:866495 version:2.10.5 Changes: -------- --- /work/SRC/openSUSE:Factory/jackson-core/jackson-core.changes 2020-03-26 23:33:15.838774820 +0100 +++ /work/SRC/openSUSE:Factory/.jackson-core.new.28504/jackson-core.changes 2021-01-26 14:50:00.143698268 +0100 @@ -1,0 +2,10 @@ +Mon Jan 25 08:16:57 UTC 2021 - Fridrich Strba <fst...@suse.com> + +- Update to 2.10.5 + * #616: Parsing JSON with 'ALLOW_MISSING_VALUE' enabled results + in endless stream of 'VALUE_NULL' tokens + * #605: Handle case when system property access is restricted + * #609: (partial fix) 'FilteringGeneratorDelegate' does not + handle 'writeString(Reader, int)' + +------------------------------------------------------------------- @@ -8 +18 @@ - * #603: 'JsonParser.getCurrentLocation()` byte/char offset update + * #603: 'JsonParser.getCurrentLocation()' byte/char offset update Old: ---- jackson-core-2.10.3.tar.gz New: ---- jackson-core-2.10.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ jackson-core.spec ++++++ --- /var/tmp/diff_new_pack.cs5TYt/_old 2021-01-26 14:50:00.615698911 +0100 +++ /var/tmp/diff_new_pack.cs5TYt/_new 2021-01-26 14:50:00.619698917 +0100 @@ -1,7 +1,7 @@ # # spec file for package jackson-core # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: jackson-core -Version: 2.10.3 +Version: 2.10.5 Release: 0 Summary: Core part of Jackson License: Apache-2.0 @@ -26,7 +26,7 @@ Source0: https://github.com/FasterXML/jackson-core/archive/%{name}-%{version}.tar.gz BuildRequires: fdupes BuildRequires: maven-local -BuildRequires: mvn(com.fasterxml.jackson:jackson-base:pom:) >= %{version} +BuildRequires: mvn(com.fasterxml.jackson:jackson-base:pom:) BuildRequires: mvn(com.google.code.maven-replacer-plugin:replacer) BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) BuildArch: noarch ++++++ jackson-core-2.10.3.tar.gz -> jackson-core-2.10.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/pom.xml new/jackson-core-jackson-core-2.10.5/pom.xml --- old/jackson-core-jackson-core-2.10.3/pom.xml 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/pom.xml 2020-07-21 03:40:39.000000000 +0200 @@ -3,13 +3,13 @@ <parent> <groupId>com.fasterxml.jackson</groupId> <artifactId>jackson-base</artifactId> - <version>2.10.3</version> + <version>2.10.5</version> </parent> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <name>Jackson-core</name> - <version>2.10.3</version> + <version>2.10.5</version> <packaging>bundle</packaging> <description>Core Jackson processing abstractions (aka Streaming API), implementation for JSON</description> <inceptionYear>2008</inceptionYear> @@ -19,7 +19,7 @@ <connection>scm:git:g...@github.com:FasterXML/jackson-core.git</connection> <developerConnection>scm:git:g...@github.com:FasterXML/jackson-core.git</developerConnection> <url>http://github.com/FasterXML/jackson-core</url> - <tag>jackson-core-2.10.3</tag> + <tag>jackson-core-2.10.5</tag> </scm> <properties> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/release-notes/CREDITS-2.x new/jackson-core-jackson-core-2.10.5/release-notes/CREDITS-2.x --- old/jackson-core-jackson-core-2.10.3/release-notes/CREDITS-2.x 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/release-notes/CREDITS-2.x 2020-07-21 03:40:39.000000000 +0200 @@ -211,3 +211,13 @@ * Reported, contributed fix for #592: DataFormatMatcher#getMatchedFormatName throws NPE when no match exists (2.10.3) + +Volkan Yaz??c?? (vy@github) + * Reported #609: (partial fix) `FilteringGeneratorDelegate` does not handle + `writeString(Reader, int)` + (2.10.4 [partial], 2.11.0 [full fix]) + +Justin Liu (jusliu@github) + * Reported #616: Parsing JSON with `ALLOW_MISSING_VALUE` enabled results in endless stream + of `VALUE_NULL` tokens + (2.10.5) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/release-notes/VERSION-2.x new/jackson-core-jackson-core-2.10.5/release-notes/VERSION-2.x --- old/jackson-core-jackson-core-2.10.3/release-notes/VERSION-2.x 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/release-notes/VERSION-2.x 2020-07-21 03:40:39.000000000 +0200 @@ -14,6 +14,19 @@ === Releases === ------------------------------------------------------------------------ +2.10.5 (21-Jul-2020) + +#616: Parsing JSON with `ALLOW_MISSING_VALUE` enabled results in endless stream + of `VALUE_NULL` tokens + (reported by Justin L) + +2.10.4 (03-May-2020) + +#605: Handle case when system property access is restricted + (reported by rhernandez35@github) +#609: (partial fix) `FilteringGeneratorDelegate` does not handle `writeString(Reader, int)` + (reported by Volkan Y) + 2.10.3 (03-Mar-2020) #592: DataFormatMatcher#getMatchedFormatName throws NPE when no match exists diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.java new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.java --- old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.java 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.java 2020-07-21 03:40:39.000000000 +0200 @@ -2,6 +2,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.Reader; import java.math.BigDecimal; import java.math.BigInteger; @@ -487,6 +488,30 @@ } @Override + public void writeString(Reader reader, int len) throws IOException { + if (_itemFilter == null) { + return; + } + if (_itemFilter != TokenFilter.INCLUDE_ALL) { + TokenFilter state = _filterContext.checkValue(_itemFilter); + if (state == null) { + return; + } + if (state != TokenFilter.INCLUDE_ALL) { + // [core#609]: do need to implement, but with 2.10.x TokenFilter no + // useful method to call so will be mostly unfiltered + /* + if (!state.includeString("")) { + return; + } + */ + } + _checkParentPath(); + } + delegate.writeString(reader, len); + } + + @Override public void writeRawUTF8String(byte[] text, int offset, int length) throws IOException { if (_checkRawValueWrite()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java --- old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java 2020-07-21 03:40:39.000000000 +0200 @@ -1132,17 +1132,20 @@ return (_currToken = _parsePosNumber(i)); /* * This check proceeds only if the Feature.ALLOW_MISSING_VALUES is enabled - * The Check is for missing values. Incase of missing values in an array, the next token will be either ',' or ']'. + * The Check is for missing values. In case of missing values in an array, the next token will be either ',' or ']'. * This case, decrements the already incremented _inputPtr in the buffer in case of comma(,) * so that the existing flow goes back to checking the next token which will be comma again and * it continues the parsing. * Also the case returns NULL as current token in case of ',' or ']'. */ +// case ']': // 11-May-2020, tatu: related to [core#616], this should never be reached case ',': - case ']': - if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { - --_inputPtr; - return (_currToken = JsonToken.VALUE_NULL); + // 11-May-2020, tatu: [core#616] No commas in root level + if (!_parsingContext.inRoot()) { + if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { + --_inputPtr; + return (_currToken = JsonToken.VALUE_NULL); + } } } return (_currToken = _handleOddValue(i)); @@ -1881,9 +1884,12 @@ } // fall through case ',': - if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { - --_inputPtr; - return JsonToken.VALUE_NULL; + // 11-May-2020, tatu: [core#616] No commas in root level + if (!_parsingContext.inRoot()) { + if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { + --_inputPtr; + return JsonToken.VALUE_NULL; + } } break; case 'N': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.java new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.java --- old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.java 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.java 2020-07-21 03:40:39.000000000 +0200 @@ -2027,10 +2027,13 @@ /* !!! TODO: 08-May-2016, tatu: To support `Feature.ALLOW_MISSING_VALUES` would * need handling here... */ - if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { + // 11-May-2020, tatu: [core#616] No commas in root level + if (!_parsingContext.inRoot()) { + if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { // _inputPtr--; - _nextByte = c; - return JsonToken.VALUE_NULL; + _nextByte = c; + return JsonToken.VALUE_NULL; + } } // fall through case '}': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java --- old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java 2020-07-21 03:40:39.000000000 +0200 @@ -2611,9 +2611,12 @@ // 28-Mar-2016: [core#116]: If Feature.ALLOW_MISSING_VALUES is enabled // we may allow "missing values", that is, encountering a trailing // comma or closing marker where value would be expected - if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { - --_inputPtr; - return JsonToken.VALUE_NULL; + // 11-May-2020, tatu: [core#616] No commas in root level + if (!_parsingContext.inRoot()) { + if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { + --_inputPtr; + return JsonToken.VALUE_NULL; + } } // fall through case '}': diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java --- old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java 2020-07-21 03:40:39.000000000 +0200 @@ -904,9 +904,12 @@ // 28-Mar-2016: [core#116]: If Feature.ALLOW_MISSING_VALUES is enabled // we may allow "missing values", that is, encountering a trailing // comma or closing marker where value would be expected - if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { - --_inputPtr; - return _valueComplete(JsonToken.VALUE_NULL); + // 11-May-2020, tatu: [core#616] No commas in root level + if (!_parsingContext.inRoot()) { + if ((_features & FEAT_MASK_ALLOW_MISSING) != 0) { + --_inputPtr; + return _valueComplete(JsonToken.VALUE_NULL); + } } // fall through case INT_RCURLY: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/util/BufferRecyclers.java new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/util/BufferRecyclers.java --- old/jackson-core-jackson-core-2.10.3/src/main/java/com/fasterxml/jackson/core/util/BufferRecyclers.java 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/main/java/com/fasterxml/jackson/core/util/BufferRecyclers.java 2020-07-21 03:40:39.000000000 +0200 @@ -5,7 +5,7 @@ /** * Helper entity used to control access to simple buffer recyling scheme used for * some encoding, decoding tasks. - * + * * @see BufferRecycler * * @since 2.9.2 @@ -33,10 +33,13 @@ */ private final static ThreadLocalBufferManager _bufferRecyclerTracker; static { - _bufferRecyclerTracker = "true".equals(System.getProperty(SYSTEM_PROPERTY_TRACK_REUSABLE_BUFFERS)) - ? ThreadLocalBufferManager.instance() - : null; - } + boolean trackReusableBuffers = false; + try { + trackReusableBuffers = "true".equals(System.getProperty(SYSTEM_PROPERTY_TRACK_REUSABLE_BUFFERS)); + } catch (SecurityException e) { } + + _bufferRecyclerTracker = trackReusableBuffers ? ThreadLocalBufferManager.instance() : null; + } /* /********************************************************** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/core/read/LocationOffsets455Test.java new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/core/read/LocationOffsets455Test.java --- old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/core/read/LocationOffsets455Test.java 1970-01-01 01:00:00.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/core/read/LocationOffsets455Test.java 2020-07-21 03:40:39.000000000 +0200 @@ -0,0 +1,51 @@ +package com.fasterxml.jackson.core.read; + +import com.fasterxml.jackson.core.JsonLocation; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; + +public class LocationOffsets455Test extends com.fasterxml.jackson.core.BaseTest +{ + // for [jackson-core#455] + public void testEOFLocationViaReader() throws Exception + { + JsonParser p = createParserUsingReader("42"); + assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); + assertEquals(42, p.getIntValue()); + JsonLocation loc = p.getCurrentLocation(); + assertEquals(1, loc.getLineNr()); + assertEquals(3, loc.getColumnNr()); + assertEquals(2, loc.getCharOffset()); + assertEquals(-1, loc.getByteOffset()); + + assertNull(p.nextToken()); + + loc = p.getCurrentLocation(); + assertEquals(1, loc.getLineNr()); + assertEquals(3, loc.getColumnNr()); + assertEquals(2, loc.getCharOffset()); + assertEquals(-1, loc.getByteOffset()); + p.close(); + } + + // for [jackson-core#455] + public void testEOFLocationViaStream() throws Exception + { + JsonParser p = createParserUsingStream("42", "UTF-8"); + assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); + assertEquals(42, p.getIntValue()); + JsonLocation loc = p.getCurrentLocation(); + assertEquals(1, loc.getLineNr()); + assertEquals(3, loc.getColumnNr()); + assertEquals(2, loc.getByteOffset()); + + assertNull(p.nextToken()); + loc = p.getCurrentLocation(); + assertEquals(1, loc.getLineNr()); + assertEquals(3, loc.getColumnNr()); + assertEquals(2, loc.getByteOffset()); + assertEquals(-1, loc.getCharOffset()); + p.close(); + } + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/core/read/TrailingCommas616Test.java new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/core/read/TrailingCommas616Test.java --- old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/core/read/TrailingCommas616Test.java 1970-01-01 01:00:00.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/core/read/TrailingCommas616Test.java 2020-07-21 03:40:39.000000000 +0200 @@ -0,0 +1,40 @@ +package com.fasterxml.jackson.core.read; + +import com.fasterxml.jackson.core.*; +import com.fasterxml.jackson.core.json.JsonReadFeature; + +public class TrailingCommas616Test extends BaseTest +{ + private final JsonFactory JSON_F_ALLOW_MISSING = JsonFactory.builder() + .enable(JsonReadFeature.ALLOW_MISSING_VALUES) + .build(); + + // [core#616] + public void testRootLevelComma616() throws Exception + { + _testRootLevel616(MODE_READER); + } + + public void testRootLevelComma616Bytes() throws Exception + { + _testRootLevel616(MODE_INPUT_STREAM); + _testRootLevel616(MODE_INPUT_STREAM_THROTTLED); + } + + public void testRootLevelComma616DataInput() throws Exception + { + _testRootLevel616(MODE_DATA_INPUT); + } + + private void _testRootLevel616(int mode) throws Exception + { + JsonParser p = createParser(JSON_F_ALLOW_MISSING, mode, ","); + try { + p.nextToken(); + fail("Should not pass"); + } catch (JsonParseException e) { + verifyException(e, "Unexpected character (','"); + } + p.close(); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/failing/LocationOffsets455Test.java new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/failing/LocationOffsets455Test.java --- old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/failing/LocationOffsets455Test.java 2020-03-03 04:11:26.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/failing/LocationOffsets455Test.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,50 +0,0 @@ -package com.fasterxml.jackson.failing; - -import com.fasterxml.jackson.core.JsonLocation; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonToken; - -public class LocationOffsets455Test extends com.fasterxml.jackson.core.BaseTest -{ - // for [jackson-core#455] - public void testEOFLocationViaReader() throws Exception - { - JsonParser p = createParserUsingReader("42"); - assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); - assertEquals(42, p.getIntValue()); - JsonLocation loc = p.getCurrentLocation(); - assertEquals(1, loc.getLineNr()); - assertEquals(3, loc.getColumnNr()); - assertEquals(2, loc.getByteOffset()); - - assertNull(p.nextToken()); - - loc = p.getCurrentLocation(); - System.err.println("LOC/r = "+loc); - assertEquals(1, loc.getLineNr()); - assertEquals(2, loc.getByteOffset()); - assertEquals(3, loc.getColumnNr()); - p.close(); - } - - // for [jackson-core#455] - public void testEOFLocationViaStream() throws Exception - { - JsonParser p = createParserUsingStream("42", "UTF-8"); - assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); - assertEquals(42, p.getIntValue()); - JsonLocation loc = p.getCurrentLocation(); - assertEquals(1, loc.getLineNr()); - assertEquals(3, loc.getColumnNr()); - assertEquals(2, loc.getByteOffset()); - - assertNull(p.nextToken()); - loc = p.getCurrentLocation(); - System.err.println("LOC/str = "+loc); - assertEquals(1, loc.getLineNr()); - assertEquals(2, loc.getCharOffset()); - assertEquals(3, loc.getColumnNr()); - p.close(); - } - -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/failing/TokenFilter609Test.java new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/failing/TokenFilter609Test.java --- old/jackson-core-jackson-core-2.10.3/src/test/java/com/fasterxml/jackson/failing/TokenFilter609Test.java 1970-01-01 01:00:00.000000000 +0100 +++ new/jackson-core-jackson-core-2.10.5/src/test/java/com/fasterxml/jackson/failing/TokenFilter609Test.java 2020-07-21 03:40:39.000000000 +0200 @@ -0,0 +1,82 @@ +package com.fasterxml.jackson.failing; + +import java.io.*; + +import com.fasterxml.jackson.core.*; +import com.fasterxml.jackson.core.filter.FilteringGeneratorDelegate; +import com.fasterxml.jackson.core.filter.TokenFilter; +import com.fasterxml.jackson.core.util.JsonGeneratorDelegate; + +// for [core#609] +public class TokenFilter609Test + extends com.fasterxml.jackson.core.BaseTest +{ + static class NullExcludingTokenFilter extends TokenFilter { + private static final NullExcludingTokenFilter INSTANCE = + new NullExcludingTokenFilter(); + + @Override + public boolean includeNull() { + return false; + } + + } + + static class StringTruncatingGeneratorDelegate + extends JsonGeneratorDelegate + { + private final int maxStringLength; + + private StringTruncatingGeneratorDelegate( + JsonGenerator jsonGenerator, + int maxStringLength) { + super(jsonGenerator); + this.maxStringLength = maxStringLength; + } + + @Override + public void writeString(String text) throws IOException { + if (text == null) { + writeNull(); + } else if (maxStringLength <= 0 || maxStringLength >= text.length()) { + super.writeString(text); + } else { +// super.writeString(text.substring(0, maxStringLength)); + StringReader textReader = new StringReader(text); + super.writeString(textReader, maxStringLength); + } + } + + @Override + public void writeFieldName(String name) throws IOException { + if (maxStringLength <= 0 || maxStringLength >= name.length()) { + super.writeFieldName(name); + } else { + String truncatedName = name.substring(0, maxStringLength); + super.writeFieldName(truncatedName); + } + } + + } + + // for [core#609]: will pass in 2.10 for some cases + @SuppressWarnings("resource") + public void testIssue609() throws Exception + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + JsonGenerator g = createGenerator(outputStream); + g = new FilteringGeneratorDelegate( + g, NullExcludingTokenFilter.INSTANCE, true, true); + int maxStringLength = 10; + g = new StringTruncatingGeneratorDelegate( + g, maxStringLength); + g.writeStartObject(); + g.writeFieldName("message"); + g.writeString("1234567890!"); + g.writeEndObject(); + g.close(); + + String json = outputStream.toString("US-ASCII"); + assertEquals("{\"message\":\"1234567890\"}", json); + } +}