Project: jackson-datatypes-binary
Modules:
  jackson-dataformat-avro
  jackson-dataformat-cbor
  jackson-dataformat-protobuf
  jackson-dataformat-smile
Versions 3.x (for earlier see VERSION-2.x)

Contains streaming API format codec implementations for supported binary formats,
as well as support for integration via `jackson-databind` (`ObjectMapper` subtype
implementations)

------------------------------------------------------------------------
=== Releases ===
------------------------------------------------------------------------

3.3.0 (07-Nov-2026)

#398: (protobuf) Add `ProtobufReadFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE`
  for unknown ids of non-standard enums
 (requested by @itsmoonrack)
 (contributed by @Dongnyoung)
#624: (cbor) Use more efficient (in JDK 17) `String` construction wrt
  "Compact Strings"
 (fix by @cowtowncoder, w/ Claude code)
#750: (smile) Avoid `String` allocation in `SmileGenerator.writeString(char[],int,int)`
 (contributed by @pjfanning)
#752: (cbor) Use `VarHandle` for multi-byte primitive writes in `CBORGenerator`
 (contributed by @pjfanning)
#757: (smile) Use `VarHandle` for multi-byte primitive reads in `SmileParser`
 (contributed by @pjfanning)
#758: (cbor) Use `VarHandle` for multi-byte primitive reads in `CBORParser`
 (contributed by @pjfanning)
#759: (smile) Use more efficient `String` construction wrt "Compact Strings"
  for "long" text values
 (fix by @cowtowncoder, w/ Claude code)
#762: (avro) Use `VarHandle` for `float`/`double` reads in Avro parser
 (contributed by @pjfanning)
#763: (protobuf) Use `VarHandle` for multi-byte primitive reads and writes in
  `ProtobufParser` / `ProtobufGenerator`
 (contributed by @pjfanning)
#767: (smile) Use more efficient `String` construction wrt "Compact Strings"
  for "short" ASCII text values of async parser
 (fix by @cowtowncoder, w/ Claude code)
#775: (avro) Update to Avro 1.12.2
#777: (avro) Properties following an `@AvroEncode`d value are silently dropped
 (fix by @cowtowncoder, w/ Claude code)
#780: (ion) `IonFactory` leaks stream when parser/generator construction fails
  for `File`/`Path`
 (contributed by @Dongnyoung)
#781: (smile) `SmileGenerator.writeNumber(String)` should validate number length
  against configured `StreamReadConstraints`, not global defaults
 (contributed by @pjfanning)
#812: (avro) Deserializing as `Object` fails with `InvalidTypeIdException` for
  unresolvable type id
 (fix by @cowtowncoder, w/ Claude code)
#823: (cbor) `maxStringLength` not consistently checked for chunked
  (indefinite-length) text values
 (fix by @pjfanning, w/ Claude code)
#860: (cbor) Invalid UTF-8 sequences (overlong, surrogates, > U+10FFFF) not rejected in text
  (NOTE: no option to accept such content, including CESU-8 / "Modified UTF-8"
  encoded text, which earlier versions decoded; also note that validation is done
  when text is decoded: skipped text values are not validated)
 (fix by @pjfanning, w/ Claude code)
#861: (smile) Invalid UTF-8 sequences (overlong, surrogates, > U+10FFFF, bad continuation
  bytes) not rejected in text
  (NOTE: no option to accept such content, including CESU-8 / "Modified UTF-8"
  encoded text, which earlier versions decoded; also note that validation is done
  when text is decoded: skipped text values are not validated)
 (fix by @pjfanning, w/ Claude code)
#862: (avro) Invalid UTF-8 sequences (overlong, surrogates, > U+10FFFF, bad continuation
  bytes) not rejected in strings
  (NOTE: only applies to the default (Jackson) decoder: Apache Avro decoder
  (`AvroFactory.builderWithApacheDecoder()`) replaces invalid UTF-8 with U+FFFD;
  no option to accept such content, including CESU-8 / "Modified UTF-8" encoded
  text, which earlier versions decoded; also note that validation is done when
  text is decoded: skipped strings are not validated)
 (fix by @pjfanning, w/ Claude code)
#863: (protobuf) Invalid UTF-8 sequences (overlong, surrogates, > U+10FFFF, bad continuation
  bytes) not rejected in strings
  (NOTE: no option to accept such content, including CESU-8 / "Modified UTF-8"
  encoded text, which earlier versions decoded; also note that validation is done
  when text is decoded: skipped strings (including unknown fields) are not validated;
  unused `ProtobufUtil.sUtf8UnitLengths` removed)
 (fix by @pjfanning, w/ Claude code)
#868: (cbor) Wrong cached property name returned for names containing 0xFF bytes
 (fix by @pjfanning, w/ Claude code)
#874: (protobuf) `nextName()` / `nextNameMatch()` do not skip an unread string value,
  decode its bytes as the next tag
 (fix by @cowtowncoder, w/ Claude code)
#876: (cbor) `nextNameMatch()` may match property names differing only
  by leading NUL bytes
 (fix by @cowtowncoder, w/ Claude code)
#879: (protobuf) `nextName()` / `nextNameMatch()` fast paths skip per-token state
  reset done by `nextToken()` (stale number, wrong token location)
 (fix by @cowtowncoder, w/ Claude code)
#881: (protobuf) Known field after a skipped unknown field gets wrong wire type,
  state or token location
 (fix by @cowtowncoder, w/ Claude code)
#882: (cbor) `nextNameMatch()` does not pop stringref nesting on `END_OBJECT`,
  resolves later stringrefs against wrong namespace
 (fix by @cowtowncoder, w/ Claude code)
#885: (smile) Cheap validation of short ASCII property names, to prevent
  symbol table bypass
 (fix by @cowtowncoder, w/ Claude code)
#887: (smile) `nextNameMatch()` matches property names with NUL bytes to shorter
  known names; (cbor) avoid slow path for such names
 (fix by @cowtowncoder, w/ Claude code)
#888: (cbor, smile) `nextFieldName(SerializableString)` matches against JSON-escaped
  name bytes (`asQuotedUTF8()`)
 (fix by @cowtowncoder, w/ Claude code)
#889: (smile) Speed up UTF-8 validation of 3- and 4-byte sequences with
  second-byte range check keyed on lead byte
 (fix by @cowtowncoder, w/ Claude code)
#895: (smile) Enforce `maxNestingDepth` in non-blocking parser
 (contributed by @Dhanu-dynamic)
#896: (avro) Negative byte size of skipped Array/Map block moves input pointer backwards,
  causing infinite loop (with both native and Apache decoders); also stricter
  validation of other lengths and item counts
 (contributed by @Dhanu-dynamic)
#901: (avro) Apache decoder allocates buffer for full declared length of `string` value
  or Map key before reading content; also enforce `maxStringLength` constraint
 (contributed by @Dhanu-dynamic, w/ Claude code)
- (avro) Generated `array` schemas missing `java-class` for `java.util.List`,
  breaking round-trip via Apache `ReflectDatumReader`

3.2.5 (not yet released)

#868: (cbor) Wrong cached property name returned for names containing 0xFF bytes
 (fix by @pjfanning, w/ Claude code)
#869: (smile) Wrong cached property name returned for names containing 0xFF bytes
 (fix by @pjfanning, w/ Claude code)
#873: (smile) `SmileParser.nextNameMatch()` misreads short non-ASCII property names
  (input not advanced on symbol-table hit, wrong quad count)
 (fix by @cowtowncoder, w/ Claude code)
#874: (protobuf) `nextName()` / `nextNameMatch()` do not skip an unread string value,
  decode its bytes as the next tag
 (fix by @cowtowncoder, w/ Claude code)
#876: (cbor) `nextNameMatch()` may match property names differing only
  by leading NUL bytes
 (fix by @cowtowncoder, w/ Claude code)
#879: (protobuf) `nextName()` / `nextNameMatch()` fast paths skip per-token state
  reset done by `nextToken()` (stale number, wrong token location)
 (fix by @cowtowncoder, w/ Claude code)
#881: (protobuf) Known field after a skipped unknown field gets wrong wire type,
  state or token location
 (fix by @cowtowncoder, w/ Claude code)
#882: (cbor) `nextNameMatch()` does not pop stringref nesting on `END_OBJECT`,
  resolves later stringrefs against wrong namespace
 (fix by @cowtowncoder, w/ Claude code)
#888: (cbor, smile) `nextFieldName(SerializableString)` matches against JSON-escaped
  name bytes (`asQuotedUTF8()`)
 (fix by @cowtowncoder, w/ Claude code)
#895: (smile) Enforce `maxNestingDepth` in non-blocking parser
 (contributed by @Dhanu-dynamic)
#896: (avro) Negative byte size of skipped Array/Map block moves input pointer backwards,
  causing infinite loop (with both native and Apache decoders); also stricter
  validation of other lengths and item counts
 (contributed by @Dhanu-dynamic)
#901: (avro) Apache decoder allocates buffer for full declared length of `string` value
  or Map key before reading content; also enforce `maxStringLength` constraint
 (contributed by @Dhanu-dynamic, w/ Claude code)

3.2.4 (18-Oct-2026)

#797: (avro) Apache decoder fails with `UnsupportedOperationException` when
  `AvroReadFeature.AVRO_BUFFERING` disabled
 (contributed by @Dongnyoung)
#816: (avro) `UnionReader.nextToken()` does not validate union index, throws
  `ArrayIndexOutOfBoundsException` for out-of-range values
 (fix by @pjfanning, w/ Claude code)
#817: (protobuf) Improve length validation for length-prefixed values in `ProtobufParser`
  [CVE-2026-104016][CVE-2026-104017][CVE-2026-110747]
 (fix by @pjfanning, w/ Claude code)
#818: (ion) Report corrupt content for String/Symbol value without text
 (fix by @pjfanning, w/ Claude code)
#819: (avro) `bytes` value allocated to declared length before checking available content
  [CVE-2026-104015]
 (fix by @pjfanning, w/ Claude code)
#821: (cbor) `CBORParser.TagList` should grow its backing array geometrically
 (fix by @pjfanning, w/ Claude code)
#825: (smile) Non-blocking Smile parser should validate raw binary length and not pre-allocate
  full buffer [CVE-2026-104895]
 (fix by @pjfanning, w/ Claude code)
#830: (smile) Non-blocking parser silently drops truncated root-level value at end-of-input
 (fix by @cowtowncoder, w/ Claude code)
#831: (smile) Non-blocking Smile parser reports wrong `currentLocation()` /
  `currentTokenLocation()` byte offsets
 (fix by @cowtowncoder, w/ Claude code)
#833: (smile) Non-blocking `_decodeShortUnicodeText()` reads past declared String length
  on truncated UTF-8 sequence
 (fix by @cowtowncoder, w/ Claude code)
#834: (smile) `SmileGenerator` silently writes wrong `BigDecimal` scale outside [-2^30, 2^30-1]
 (fix by @cowtowncoder, w/ Claude code)
#835: (smile) `SmileParser.getString(Writer)` writes stale text for numeric tokens
 (fix by @cowtowncoder, w/ Claude code)
#838: (smile) Non-blocking Smile parser requires a header after a root-level scalar
  value (rejects end marker, following root values)
 (fix by @cowtowncoder, w/ Claude code)
#842: (cbor) `CBORGenerator` writes wrong exponent for `BigDecimal` with scale `Integer.MIN_VALUE`
 (fix by @cowtowncoder, w/ Claude code)
#844: (cbor) `CBORParser.getString(Writer)` writes stale text for numeric tokens,
  NPE for binary
 (fix by @cowtowncoder, w/ Claude code)
#845: (avro) Avro parsers' `getString(Writer)` write wrong text for numeric tokens,
  NPE for binary; `ApacheAvroParserImpl.getString()` returns stale text for non-String scalars
 (fix by @cowtowncoder, w/ Claude code)
#846: (protobuf) `ProtobufParser.getString(Writer)` writes stale text for numeric tokens,
  NPE for binary
 (fix by @cowtowncoder, w/ Claude code)
#852: (avro) `skipMap()` / `skipArray()` on `Decoder` passed to `@AvroEncode` `CustomEncoding`
  misreads data
 (fix by @cowtowncoder, w/ Claude code)
#855: (avro) `arrayNext()` / `mapNext()` on `Decoder` passed to `@AvroEncode`
  `CustomEncoding` lose elements and the following field
 (fix by @cowtowncoder, w/ Claude code)

3.2.3 (21-Sep-2026)

#745: (avro) Fix Avro bugs
 (contributed by @pjfanning)
#761: (smile) Async parser misses #312 NUL-padding: short property name
  collides with NUL-prefixed longer one
#770: (smile) Async parser decodes short ASCII values split across input feeds
  as short Unicode
#776: (protobuf) `ProtobufGenerator.writeString(char[],int,int)` writes enum
  values twice
 (contributed by @pjfanning)
#783: (protobuf) Support `StreamReadConstraints.maxDocumentLength` in `ProtobufParser`
 (contributed by @pjfanning)
#785: (avro) Support `StreamReadConstraints.maxDocumentLength` and `maxTokenCount`
  in Avro parser
 (contributed by @pjfanning)
#800: (ion) Upgrade `ion-java` dependency to 1.12.1 (from 1.11.11, which has
  binary-write corruption bug)
 (fix by @cowtowncoder, w/ Claude code)
#803: (ion) Support `StreamReadConstraints.maxNestingDepth` in Ion parser
  (partial fix for #358)
 (reported by @pjfanning)
 (fix by @cowtowncoder, w/ Claude code)
#805: (ion) Support `StreamReadConstraints.maxDocumentLength` in Ion parser
  (partial fix for #358)
 (reported by @pjfanning)
 (fix by @cowtowncoder, w/ Claude code)
- Fixed signature of `CBORGenerator.writeNumberUnsigned()` methods

3.2.2 (14-Aug-2026)

#708: (protobuf) proto3 label-less field declarations fail to parse
#712: (protobuf) `map` type not supported with protobuf: should be supported
  idiomatically
#714: (protobuf) Packed repeated field fails to decode when array spans an input
  buffer reload
#715: (protobuf) `ProtobufGenerator._reportWrongWireType()` always reports `string`,
  ignoring actual type
#720: (smile) `SmileGenerator` int overflow in `maxLen` for very long Strings
  (>= 715,827,882 chars) causes `ArrayIndexOutOfBoundsException`
 (reported by Benjamin M)
#725: (cbor) Ensure `maxNameLength` limit enforced for CBOR parser [CVE-2026-68495]
 (reported by @tinyb0y)
#726: (smile) Ensure `maxNameLength` limit enforced for Smile parser [CVE-2026-68496]
 (reported by @tinyb0y)
#727: (cbor) `CBORParser.nextName(SerializableString)` confuses 5-bit length
  marker 23 with 24 ("1-byte length suffix follows")
#728: (cbor) `CBORParser.nextName(SerializableString)` consumes Object entry
  slot twice on fast-path miss, truncating definite-length Objects
#735: (cbor) "stringref" property-name paths pass 5-bit length marker instead of
  actual length to `shouldReferenceString()`
#736: (cbor) Long Object property names added to "stringref" reference table twice
#742: Use `ArrayDeque` instead of `Stack` in `CBORParser`
 (reported by Benoît M)
 (fix by @cowtowncoder, w/ Claude code)

3.2.1 (10-Jul-2026)

No changes since 3.2.0

3.2.0 (08-Jun-2026)

#662: (avro) Remove `IOException` from `AvroMapper.schemaFrom()`
  method signatures
#674: Smile parser does not update `StreamReadContext` index or entry count

3.1.9 (not yet released)

#868: (cbor) Wrong cached property name returned for names containing 0xFF bytes
 (fix by @pjfanning, w/ Claude code)
#869: (smile) Wrong cached property name returned for names containing 0xFF bytes
 (fix by @pjfanning, w/ Claude code)
#873: (smile) `SmileParser.nextNameMatch()` misreads short non-ASCII property names
  (input not advanced on symbol-table hit, wrong quad count)
 (fix by @cowtowncoder, w/ Claude code)
#874: (protobuf) `nextName()` / `nextNameMatch()` do not skip an unread string value,
  decode its bytes as the next tag
 (fix by @cowtowncoder, w/ Claude code)
#876: (cbor) `nextNameMatch()` may match property names differing only
  by leading NUL bytes
 (fix by @cowtowncoder, w/ Claude code)
#879: (protobuf) `nextName()` / `nextNameMatch()` fast paths skip per-token state
  reset done by `nextToken()` (stale number, wrong token location)
 (fix by @cowtowncoder, w/ Claude code)
#881: (protobuf) Known field after a skipped unknown field gets wrong wire type,
  state or token location
 (fix by @cowtowncoder, w/ Claude code)
#882: (cbor) `nextNameMatch()` does not pop stringref nesting on `END_OBJECT`,
  resolves later stringrefs against wrong namespace
 (fix by @cowtowncoder, w/ Claude code)
#888: (cbor, smile) `nextFieldName(SerializableString)` matches against JSON-escaped
  name bytes (`asQuotedUTF8()`)
 (fix by @cowtowncoder, w/ Claude code)
#895: (smile) Enforce `maxNestingDepth` in non-blocking parser
 (contributed by @Dhanu-dynamic)
#896: (avro) Negative byte size of skipped Array/Map block moves input pointer backwards,
  causing infinite loop (with both native and Apache decoders); also stricter
  validation of other lengths and item counts
 (contributed by @Dhanu-dynamic)
#901: (avro) Apache decoder allocates buffer for full declared length of `string` value
  or Map key before reading content; also enforce `maxStringLength` constraint
 (contributed by @Dhanu-dynamic, w/ Claude code)

3.1.8 (17-Oct-2026)

#797: (avro) Apache decoder fails with `UnsupportedOperationException` when
  `AvroReadFeature.AVRO_BUFFERING` disabled
 (contributed by @Dongnyoung)
#816: (avro) `UnionReader.nextToken()` does not validate union index, throws
  `ArrayIndexOutOfBoundsException` for out-of-range values
 (fix by @pjfanning, w/ Claude code)
#817: (protobuf) Improve length validation for length-prefixed values in `ProtobufParser`
  [CVE-2026-104016][CVE-2026-104017][CVE-2026-110747]
 (fix by @pjfanning, w/ Claude code)
#818: (ion) Report corrupt content for String/Symbol value without text
 (fix by @pjfanning, w/ Claude code)
#819: (avro) `bytes` value allocated to declared length before checking available content
  [CVE-2026-104015]
 (fix by @pjfanning, w/ Claude code)
#821: (cbor) `CBORParser.TagList` should grow its backing array geometrically
 (fix by @pjfanning, w/ Claude code)
#825: (smile) Non-blocking Smile parser should validate raw binary length and not pre-allocate
  full buffer [CVE-2026-104895]
 (fix by @pjfanning, w/ Claude code)
#830: (smile) Non-blocking parser silently drops truncated root-level value at end-of-input
 (fix by @cowtowncoder, w/ Claude code)
#831: (smile) Non-blocking Smile parser reports wrong `currentLocation()` /
  `currentTokenLocation()` byte offsets
 (fix by @cowtowncoder, w/ Claude code)
#833: (smile) Non-blocking `_decodeShortUnicodeText()` reads past declared String length
  on truncated UTF-8 sequence
 (fix by @cowtowncoder, w/ Claude code)
#834: (smile) `SmileGenerator` silently writes wrong `BigDecimal` scale outside [-2^30, 2^30-1]
 (fix by @cowtowncoder, w/ Claude code)
#835: (smile) `SmileParser.getString(Writer)` writes stale text for numeric tokens
 (fix by @cowtowncoder, w/ Claude code)
#838: (smile) Non-blocking Smile parser requires a header after a root-level scalar
  value (rejects end marker, following root values)
 (fix by @cowtowncoder, w/ Claude code)
#842: (cbor) `CBORGenerator` writes wrong exponent for `BigDecimal` with scale `Integer.MIN_VALUE`
 (fix by @cowtowncoder, w/ Claude code)
#844: (cbor) `CBORParser.getString(Writer)` writes stale text for numeric tokens,
  NPE for binary
 (fix by @cowtowncoder, w/ Claude code)
#845: (avro) Avro parsers' `getString(Writer)` write wrong text for numeric tokens,
  NPE for binary; `ApacheAvroParserImpl.getString()` returns stale text for non-String scalars
 (fix by @cowtowncoder, w/ Claude code)
#846: (protobuf) `ProtobufParser.getString(Writer)` writes stale text for numeric tokens,
  NPE for binary
 (fix by @cowtowncoder, w/ Claude code)
#852: (avro) `skipMap()` / `skipArray()` on `Decoder` passed to `@AvroEncode` `CustomEncoding`
  misreads data
 (fix by @cowtowncoder, w/ Claude code)
#855: (avro) `arrayNext()` / `mapNext()` on `Decoder` passed to `@AvroEncode`
  `CustomEncoding` lose elements and the following field
 (fix by @cowtowncoder, w/ Claude code)

3.1.7 (21-Sep-2026)

#745: (avro) Fix Avro bugs
#761: (smile) Async parser misses #312 NUL-padding: short property name
  collides with NUL-prefixed longer one
#770: (smile) Async parser decodes short ASCII values split across input feeds
  as short Unicode
#776: (protobuf) `ProtobufGenerator.writeString(char[],int,int)` writes enum
  values twice
 (contributed by @pjfanning)
#783: (protobuf) Support `StreamReadConstraints.maxDocumentLength` in `ProtobufParser`
 (contributed by @pjfanning)
#785: (avro) Support `StreamReadConstraints.maxDocumentLength` and `maxTokenCount`
  in Avro parser
 (contributed by @pjfanning)
#800: (ion) Upgrade `ion-java` dependency to 1.12.1 (from 1.11.11, which has
  binary-write corruption bug)
 (fix by @cowtowncoder, w/ Claude code)
#803: (ion) Support `StreamReadConstraints.maxNestingDepth` in Ion parser
  (partial fix for #358)
 (reported by @pjfanning)
 (fix by @cowtowncoder, w/ Claude code)
#805: (ion) Support `StreamReadConstraints.maxDocumentLength` in Ion parser
  (partial fix for #358)
 (reported by @pjfanning)
 (fix by @cowtowncoder, w/ Claude code)
- Fixed signature of `CBORGenerator.writeNumberUnsigned()` methods

3.1.6 (14-Aug-2026)

#708: (protobuf) proto3 label-less field declarations fail to parse
#712: (protobuf) `map` type not supported with protobuf: should be supported
  idiomatically
#714: (protobuf) Packed repeated field fails to decode when array spans an input
  buffer reload
#715: (protobuf) `ProtobufGenerator._reportWrongWireType()` always reports `string`,
  ignoring actual type
#720: (smile) `SmileGenerator` int overflow in `maxLen` for very long Strings
  (>= 715,827,882 chars) causes `ArrayIndexOutOfBoundsException`
 (reported by Benjamin M)
#725: (cbor) Ensure `maxNameLength` limit enforced for CBOR parser [CVE-2026-68495]
 (reported by @tinyb0y)
#726: (smile) Ensure `maxNameLength` limit enforced for Smile parser [CVE-2026-68496]
 (reported by @tinyb0y)
#727: (cbor) `CBORParser.nextName(SerializableString)` confuses 5-bit length
  marker 23 with 24 ("1-byte length suffix follows")
#728: (cbor) `CBORParser.nextName(SerializableString)` consumes Object entry
  slot twice on fast-path miss, truncating definite-length Objects
#735: (cbor) "stringref" property-name paths pass 5-bit length marker instead of
  actual length to `shouldReferenceString()`
#736: (cbor) Long Object property names added to "stringref" reference table twice
 (NOTE: in 3.x this affected the `nextNameMatch()` decoding path as well)
#742: Use `ArrayDeque` instead of `Stack` in `CBORParser`
 (reported by Benoît M)
 (fix by @cowtowncoder, w/ Claude code)

3.1.5 (07-Jul-2026)

#134: (protobuf) `oneof` fields and some repeated fields incorrectly decoded for proto3 schemas
  (reported by @vogt31337)
#700: (cbor, smile) `META-INF/services/tools.jackson.databind.ObjectMapper`
  references wrong class name (`...databind.CBORMapper` / `...databind.SmileMapper`)
 (reported by Juan F)

3.1.4 (29-May-2026)

#691: (cbor) Add parameterized tests covering all ASCII-optimization exit paths
  in CBORParser
 (contributed by Manuel S)
#693: (avro) Incomplete number length validation in Avro decoder (for `BigDecimal`)
 (reported by @tonghuaroot)

3.1.3 (01-May-2026)

No changes since 3.1.2

3.1.2 (11-Apr-2026)

#686: `CBORParser._finishLongTextAscii` returns negative length when `TextBuffer`
  segment > I/O buffer, leaving non-ASCII byte unconsumed
 (fixed by Halil İbrahim Ş)

3.1.1 (27-Mar-2026)

#387: Avro generator should enforce `StreamWriteConstraints.maxNestingDepth`
#669: STRINGREF String reference outside of a namespace
 (reported by Klaus M)
 (fix by @cowtowncoder, w/ Claude code)

3.1.0 (23-Feb-2026)

#73: (protobuf) Cannot resolve inner types in protoc definitions
 (reported by Kenji N)
 (fix by @cowtowncoder, w/ Claude code)
#436: (ion) `IonFactory.createParser(IonReader)` does not initialize state
 (fix by @cowtowncoder, w/ Claude code)
#514: (avro) Update to Avro 1.12.1 (Jackson 3.x only)
#598: (protobuf) Protobuf parser state handling wrong for implicit close (END_OBJECT)
 (fix by @cowtowncoder, w/ Claude code)
#619: (avro, cbor, ion, smile) Add `isEnabled()` methods for format-specific features
  (like `CBORReadFeature` and `CBORWriteFeature`) to mappers
 (requested by Andy W)
#623: (ion) Upgrade `ion-java` dep to 1.11.11 (from 1.11.10)
 (requested by @Shaurya0108)
#628: (avro, cbor, ion, protobuf, smile)  Uncommon parent pom dependency
 configuration in Jackson 2.20/3.0
 (reported by Josh C)
#629: (ion) Unnecessary `IOException` in `IonObjectMapper` method signatures
 (fix contributed by Michael L)
#649: (cbor, smile) `StreamReadConstraints.maxDocumentLength` not checked
  when creating parser with fixed buffer

3.0.4 (not yet released)

#640: (cbor) CBOR throws ArrayIndexOutOfBoundsException with long ASCII text
 (reported, fix contributed by Manuel S)

3.0.3 (28-Nov-2025)

- (avro) Upgrade `avro` lib dep to 1.11.5 (from 1.11.4)

3.0.2 (07-Nov-2025)
3.0.1 (21-Oct-2025)

No changes since 3.0.0

3.0.0 (03-Oct-2025)

#145: (avro) Add `AvroGenerator.Feature.ADD_NULL_AS_DEFAULT_VALUE_IN_SCHEMA` for
  adding default `null` in generated schema
 (contributed by kucera-jan-cz@github)
#245: (ion) Pretty-printing not working Ion/text backend
#522: JSTEP-8: rename `AvroParser.Feature` as `AvroReadFeature`,
  `AvroGenerator.Feature` as `AvroWriteFeature`
#524: JSTEP-8: rename `CBORGenerator.Feature` as `CBORWriteFeature`
#526: JSTEP-8: rename `IonParser.Feature` as `IonReadFeature`,
  `IonGenerator.Feature` as `IonWriteFeature`
#528: JSTEP-8: rename `SmileParser.Feature` as `SmileReadFeature`,
  `SmileGenerator.Feature` as `SmileWriteFeature`
#543: (avro) Enable "logical types" support in `AvroSchemaGenerator`
  by default (3.0)
#557: Change 3.0 to use `module-info.java` directly [JSTEP-11]
#559 (cbor, smile) Move `CBORMapper` and `SmileMapper` into main-level
  Java package from under `MAIN.databind`-
#582: Change defaults for `CBORReadFeature.DECODE_USING_STANDARD_NEGATIVE_BIGINT_ENCODING`
  and `CBORWriteFeature.ENCODE_USING_STANDARD_NEGATIVE_BIGINT_ENCODING` to `true` (enabled)
 (contributed by by Fawzi E)
#591: Change `CBOR` Features defaults for 3.0
 (contributed by by Fawzi E)
- Minimum Java baseline: Java 17
- (protobuf) Remove shading of `protoparser` dependency (and change
  Maven packaging type to "jar" from "bundle")
