Version history
This library adheres to Semantic Versioning.
5.6.3 (2024-02-22)
Fixed decoding of epoch-based dates being affected by the local time zone in the C extension
5.6.2 (2024-02-19)
Fixed
__hash__()
of the C version of theCBORTag
type crashing when there’s a recursive reference cycleFixed type annotation for the file object in
cbor2.dump()
,cbor2.load()
,CBOREncoder
andCBORDecoder
to beIO[bytes]
instead ofBytesIO
Worked around a CPython bug that caused a
SystemError
to be raised, or even a buffer overflow to occur when decoding a long text string that contained only ASCII charactersChanged the return type annotations of
cbor2.load()
andcbor2.load()
to returnAny
instead ofobject
so as not to force users to make type casts
5.6.1 (2024-02-01)
Fixed use-after-free in the decoder’s C version when prematurely encountering the end of stream
Fixed the C version of the decoder improperly raising
CBORDecodeEOF
when decoding a text string longer than 65536 bytes
5.6.0 (2024-01-17)
Added the
cbor2
command line tool (forpipx run cbor2
)Added support for native date encoding (bschoenmaeckers)
Made the C extension mandatory when the environment variable
CBOR2_BUILD_C_EXTENSION
is set to1
.Fixed
SystemError
in the C extension when decoding aFractional
with a bad number of arguments or a non-tuple valueFixed
SystemError
in the C extension when the decoder object hook raises an exceptionFixed a segmentation fault when decoding invalid unicode data
Fixed infinite recursion when trying to hash a CBOR tag whose value points to the tag itself
Fixed
MemoryError
when maliciously constructed bytestrings or string (declared to be absurdly large) are being decodedFixed
UnicodeDecodeError
from failed parsing of a UTF-8 text string not being wrapped asCBORDecodeValueError
Fixed
TypeError
orZeroDivisionError
from a failed decoding ofFraction
not being wrapped asCBORDecodeValueError
Fixed
TypeError
orValueError
from a failed decoding ofUUID
not being wrapped asCBORDecodeValueError
Fixed
TypeError
from a failed decoding ofMIMEMessage
not being wrapped asCBORDecodeValueError
Fixed
OverflowError
,OSError
orValueError
from a failed decoding of epoch-baseddatetime
not being wrapped asCBORDecodeValueError
5.5.1 (2023-11-02)
Fixed
CBORSimpleValue
allowing the use of reserved values (24 to 31) which resulted in invalid byte sequencesFixed encoding of simple values from 20 to 23 producing the wrong byte sequences
5.5.0 (2023-10-21)
The
cbor2.encoder
,cbor2.decoder
orcbor2.types
modules were deprecated – import their contents directly fromcbor2
from now on. The old modules will be removed in the next major release.Added support for Python 3.12
Added type annotations
Dropped support for Python 3.7
Fixed bug in the
fp
attribute of the built-in version ofCBORDecoder
andCBOREncoder
where the getter returns an invalid pointer if theread
method of the file was a built-in method
5.4.6 (2022-12-07)
Fix MemoryError when decoding Tags on 32bit architecture. (Sekenre)
5.4.5 (2022-11-29)
Added official Python 3.11 support (agronholm)
Raise proper exception on invalid bignums (Øyvind Rønningstad)
Make Tagged item usable as a map key (Niels Mündler)
Eliminate potential memory leak in tag handling (Niels Mündler)
Documentation tweaks (Adam Johnson)
5.4.4 (2022-11-28)
REMOVED Due to potential memory leak bug
5.4.3 (2022-05-03)
Removed support for Python < 3.7
Various build system improvements for binary wheels (agronholm)
Migrated project to use
pyproject.toml
and pre-commit hooks (agronholm)
5.4.2 (2021-10-14)
Fix segfault when initializing CBORTag with incorrect arguments (Sekenre)
Fix sphinx build warnings (Sekenre)
5.4.1 (2021-07-23)
Fix SystemErrors when using C-backend, meaningful exceptions now raised (Sekenre)
Fix precision loss when decoding base10 decimal fractions (Sekenre)
Made CBORTag handling consistent between python and C-module (Sekenre)
5.4.0 (2021-06-04)
Fix various bounds checks in the C-backend (Sekenre)
More testing of invalid/corrupted data (Sekenre)
Support for String References (xurtis)
Update Docs to refer to new RFC8949
5.3.0 (2021-05-18)
Removed support for Python < 3.6
5.2.0 (2020-09-30)
Final version tested with Python 2.7 and 3.5
README: Announce deprecation of Python 2.7, 3.5
README: More detail and examples
Bugfix: Fix segfault on loading huge arrays with C-backend (Sekenre)
Build system: Allow packagers to force C-backend building or disable using env var (jameshilliard)
Feature:
cbor2.tool
Command line diagnostic tool (Sekenre)Feature: Ignore semantic tag used for file magic 55799 AKA “Self-Described CBOR” (kalcutter)
5.1.2 (2020-07-21)
Bugfix: Refcount bug in C lib causing intermittent segfaults on shutdown (tdryer)
5.1.1 (2020-07-03)
Build system: Making C lib optional if it fails to compile (chiefnoah)
Build system: Better Glibc version detection (Sekenre and JayH5)
Tests: Positive and negative bignums (kalcutter)
Bugfix: Fractional seconds parsing in datetimes (kalcutter)
5.1.0 (2020-03-18)
Minor API change:
CBORSimpleValue
is now a subclass of namedtuple and allows all numeric comparisons. This brings functional parity between C and Python modules.Fixes for C-module on big-endian systems including floating point decoding, smallint encoding, and boolean argument handling. Tested on s390x and MIPS32.
Increase version requred of setuptools during install due to unicode errors.
5.0.1 (2020-01-21)
Fix deprecation warning on python 3.7, 3.8 (mariano54)
Minor documentation tweaks
5.0.0 (2020-01-20)
BACKWARD INCOMPATIBLE CBOR does not have a bare DATE type, encoding dates as datetimes is disabled by default (PR by Changaco)
BACKWARD INCOMPATIBLE
CBORDecoder.set_shareable()
only takes the instance to share, not the shareable’s indexBACKWARD INCOMPATIBLE
CBORError
now descends fromException
rather thanValueError
; however, subordinate exceptions now descend fromValueError
(where appropriate) so most users should notice no differenceBACKWARD INCOMPATIBLE
CBORDecoder
can now raiseCBORDecodeEOF
which inherits fromEOFError
supporting streaming applicationsOptional Pure C implementation by waveform80 that functions identically to the pure Python implementation with further contributions from: toravir, jonashoechst, Changaco
Drop Python 3.3 and 3.4 support from the build process; they should still work if built from source but are no longer officially supported
Added support for encoding and decoding
ipaddress.IPv4Address
,ipaddress.IPv6Address
,ipaddress.IPv4Network
, andipaddress.IPv6Network
(semantic tags 260 and 261)
4.2.0 (2020-01-10)
BROKEN BUILD Removed
4.1.2 (2018-12-10)
Fixed bigint encoding taking quadratic time
Fixed overflow errors when encoding floating point numbers in canonical mode
Improved decoder performance for dictionaries
Minor documentation tweaks
4.1.1 (2018-10-14)
Fixed encoding of negative
decimal.Decimal
instances (PR by Sekenre)
4.1.0 (2018-05-27)
Added canonical encoding (via
canonical=True
) (PR by Sekenre)Added support for encoding/decoding sets (semantic tag 258) (PR by Sekenre)
Added support for encoding
FrozenDict
(hashable dict) as map keys or set elements (PR by Sekenre)
4.0.1 (2017-08-21)
Fixed silent truncation of decoded data if there are not enough bytes in the stream for an exact read (
CBORDecodeError
is now raised instead)
4.0.0 (2017-04-24)
BACKWARD INCOMPATIBLE Value sharing has been disabled by default, for better compatibility with other implementations and better performance (since it is rarely needed)
BACKWARD INCOMPATIBLE Replaced the
semantic_decoders
decoder option with theCBORDecoder.tag_hook
optionBACKWARD INCOMPATIBLE Replaced the
encoders
encoder option with theCBOREncoder.default
optionBACKWARD INCOMPATIBLE Factored out the file object argument (
fp
) from all callbacksBACKWARD INCOMPATIBLE The encoder no longer supports every imaginable type implementing the
Sequence
orMap
interface, as they turned out to be too broadAdded the
CBORDecoder.object_hook
option for decoding dicts into complex objects (intended for situations where JSON compatibility is required and semantic tags cannot be used)Added encoding and decoding of simple values (
CBORSimpleValue
) (contributed by Jerry Lundström)Replaced the decoder for bignums with a simpler and faster version (contributed by orent)
Made all relevant classes and functions available directly in the
cbor2
namespaceAdded proper documentation
3.0.4 (2016-09-24)
Fixed TypeError when trying to encode extension types (regression introduced in 3.0.3)
3.0.3 (2016-09-23)
No changes, just re-releasing due to git tagging screw-up
3.0.2 (2016-09-23)
Fixed decoding failure for datetimes with microseconds (tag 0)
3.0.1 (2016-08-08)
Fixed error in the cyclic structure detection code that could mistake one container for another, sometimes causing a bogus error about cyclic data structures where there was none
3.0.0 (2016-07-03)
BACKWARD INCOMPATIBLE Encoder callbacks now receive three arguments: the encoder instance, the value to encode and a file-like object. The callback must must now either write directly to the file-like object or call another encoder callback instead of returning an iterable.
BACKWARD INCOMPATIBLE Semantic decoder callbacks now receive four arguments: the decoder instance, the primitive value, a file-like object and the shareable index for the decoded value. Decoders that support value sharing must now set the raw value at the given index in
decoder.shareables
.BACKWARD INCOMPATIBLE Removed support for iterative encoding (
CBOREncoder.encode()
is no longer a generator function and always returnsNone
)Significantly improved performance (encoder ~30 % faster, decoder ~60 % faster)
Fixed serialization round-trip for
undefined
(simple type 23)Added proper support for value sharing in callbacks
2.0.0 (2016-06-11)
BACKWARD INCOMPATIBLE Deserialize unknown tags as
CBORTag
objects so as not to lose informationFixed error messages coming from nested structures
1.1.0 (2016-06-10)
Fixed deserialization of cyclic structures
1.0.0 (2016-06-08)
Initial release