6.0.0rc1
-
MAJOR REWRITE: The Python and C implementations of the encoder and decoder were replaced with a single, Rust-based implementation in the interest of maintainability.
Here are some of the highlights:
- Improved memory safety (100% safe-mode Rust)
- Complete elimination of reference leaks
- Support for free-threading and subinterpreters
- Substantially improved performance
- Improved decoder error handling where any non-base exception gets wrapped in a
CBORDecodeError - Iterative, rather than recursive decoding, meaning the container nesting depth is limited only by the available memory, rather than the C stack size
-
BACKWARD INCOMPATIBLE Changed the signature of the
tag_hookdecoder callables to accept (CBORTag,immutableas arguments instead ofCBORDecoder,CBORTag) -
BACKWARD INCOMPATIBLE Changed the signature of the
object_hookdecoder callables to accept (Mapping[Any, Any],bool) instead of (CBORDecoder,dict[Any, Any]) -
BACKWARD INCOMPATIBLE Removed the
break_markersingleton as no longer necessary -
BACKWARD INCOMPATIBLE Removed the
CBORDecodeValueErrorexception, instead chainingValueErrororTypeErrorto aCBORDecodeError -
BACKWARD INCOMPATIBLE Changed the decoding of semantic tag 261 to yield an
IPv4InterfaceorIPv6Interfaceif the address contains host bits -
BACKWARD INCOMPATIBLE Removed the individual decoding functions from the API as they were mistakenly called directly by users. Please open an issue if you need them back.
-
BACKWARD INCOMPATIBLE Changed the encoding of IP addresses to use the semantic tags 52 and 54 instead of the deprecated 260 and 261 (#232)
-
BACKWARD INCOMPATIBLE Dropped the deprecated
cbor2.decoderandcbor2.encodermodules – everything in the API is now importable directly fromcbor2 -
BACKWARD INCOMPATIBLE The
cbor2.FrozenDictclass has now been renamedfrozendictand is not available on Python 3.15 where the built-infrozendictclass must be used instead -
Added the
semantic_decodersdecoder option to add or override decoders for specific semantic tags -
Added the
immutabledecoder flag to always use immutable containers where possible when decoding a CBOR stream -
Added the
allow_indefinitedecoder option to optionally disallow indefinite-length strings and containers -
Dropped support for Python 3.9
-
Fixed the decoder not rejecting invalid two-byte simple value sequences (0xF800 - 0xF81F)