Skip to content

chore: release v0.6.7#107

Merged
MagicalTux merged 1 commit into
masterfrom
release-plz-2026-06-30T09-00-26Z
Jun 30, 2026
Merged

chore: release v0.6.7#107
MagicalTux merged 1 commit into
masterfrom
release-plz-2026-06-30T09-00-26Z

Conversation

@MagicalTux

@MagicalTux MagicalTux commented Jun 30, 2026

Copy link
Copy Markdown
Member

🤖 New release

  • compcol: 0.6.6 -> 0.6.7 (✓ API compatible changes)
Changelog

0.6.7 - 2026-06-30

Added

  • (zstd) validate Content_Checksum frames (XXH64)

Fixed

  • (decoder) report OutputFull when the output buffer is full

Other

  • (lzma2/xz) linear-time match finder + faster optimal parse

Added

  • (zstd) decode and validate frames carrying a Content_Checksum (the zstd
    CLI writes one by default). Previously any such frame was refused with
    Unsupported, so default zstd output only decoded with --no-check. Adds a
    streaming XXH64 implementation; the decompressed output is hashed and checked
    against the 4-byte frame trailer, reporting ChecksumMismatch on corruption.

Fixed

  • (decoder bridge) a decoder that buffers a whole block internally (notably
    bzip2) could fail a naive decode loop with UnexpectedEnd. When the
    caller's output buffer filled mid-block, the RawDecoderDecoder bridge
    reported InputEmpty (because the decoder had already absorbed all the input)
    instead of OutputFull; a loop that stops on InputEmpty then called
    finish on a half-drained stream and got UnexpectedEnd. The bridge now
    returns OutputFull whenever the output buffer is full, which is always the
    correct "drain and call again" signal. Affected bzip2 round-trips whenever a
    decoded block was larger than the output buffer.
  • (lzma2/xz) eliminated quadratic encode time on incompressible/low-match
    input. The match finder's hash head table was a fixed 64 Ki buckets, so as the
    input grew the per-bucket chains lengthened and every probe walked work that
    scaled with the input — xz encode of 4 MiB of random data took ~6.7 s and
    kept worsening. The head table is now sized to the match-finder window (like
    liblzma sizes its hash to the dictionary), so chains stay O(1) and encode is
    linear. Output is byte-for-byte unchanged.

Changed

  • (lzma2/xz) faster optimal-parse encoder, output unchanged: length-symbol
    prices are cached per pos_state and refreshed periodically (instead of an
    8-bit bittree walk per length per position), the new-match distance price is
    computed once per dist-state band rather than per length, and match-length
    comparison runs eight bytes at a time. Net: ~3× fewer instructions on
    natural-language text, ~4× on long-run data, ~1.6× on mixed source code, with
    identical compressed output.


This PR was generated with release-plz.

@MagicalTux MagicalTux force-pushed the release-plz-2026-06-30T09-00-26Z branch from 8e739f2 to 52852ea Compare June 30, 2026 09:06
@MagicalTux MagicalTux force-pushed the release-plz-2026-06-30T09-00-26Z branch from 52852ea to da37be4 Compare June 30, 2026 09:21
@MagicalTux MagicalTux merged commit 227f352 into master Jun 30, 2026
7 checks passed
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.

1 participant