Skip to content

Support indefinite length bytestring, v2 - #384

Open
coot wants to merge 3 commits into
well-typed:masterfrom
coot:coot/inifinite-bignum
Open

coot wants to merge 3 commits into
well-typed:masterfrom
coot:coot/inifinite-bignum

Conversation

@coot

@coot coot commented Jul 24, 2026

Copy link
Copy Markdown

This PR subsumes #371 - it fixes a subtle bug in incremental decoding of big integers, also provides a test which shows the bug and verifies it is fixed.

qnikst and others added 3 commits November 12, 2025 12:05
We support indefinite length bytestring in the Read module.

In order to do it we add two extra variants for bigint deseralization,
both puts us to the slow-path to start consumption of the chunks.

This serialization is considered non-canonical thus canonical read
rejects is. While specification is silent about it, the cbor.me
implementation always converts bigit into a fixed size byte blob.

Fixes well-typed#263.
The previous patch, missed a case in which incremental decoding is fed
with `0xc2` (or `0xc3`) indicating that we are decoding big integer, but
then the `0x5f` (`TypeBytesIndef`) is in the next chunk.  The original
implementation ended up in `adjustContBigUIntNeedHeader` or
`adjustContBigNIntNeedHeader` which issues `ConsumeBytes`, which fails
on `TypeBytesIndef`.  For that reason both
`adjustContBig[UN]IntNeedHeader` need to first peek and verify weather
we are at `TypeBytesIndef` (`0x5f`) or passed it.  This fix is not
required for `adjustContCanonicalBig[UN]IntNeedHeader` since canonical
encoding of `Integer`s must not use indefinite encoding, and it is
rightfully rejected by `tryConsumeBytes`.
@coot coot changed the title inifinite bignum Support indefinite length bytestring, v2 Jul 24, 2026
@github-project-automation github-project-automation Bot moved this to In Progress in Ouroboros Network Jul 24, 2026
@coot coot moved this from In Progress to In Review in Ouroboros Network Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants