Skip to content

VaptVupt v2.65.9

Choose a tag to compare

@cristiancmoises cristiancmoises released this 01 Sep 18:21
· 17 commits to v260-master since this release

Performance, correctness, and release-infrastructure maintenance. The frame
layout is unchanged from v2.65.8, and streams v2.65.8 encoded validly remain
compatible. The rare formerly undecodable SEQ candidate described below now
selects a different, lossless fallback representation.

  • Sequence tANS decode tables are now built directly in their final storage
    rather than through a 4 KiB spread array. Per-block sequence-table scratch
    drops from 52 KiB to 48 KiB. A test compares the direct and historical
    builders entry-for-entry across 256 deterministic normalized tables, and the
    established ANS, roundtrip, SEQ, safe-zone, and exact-buffer regressions pass.
  • Fixed a rare SEQ-encoder data-integrity defect. The wire carries one global
    match_count, so a literal run over 65,535 bytes before a later match cannot
    be split into a zero-match midstream entry: the decoder assigns real matches
    to the first match_count LL entries. The encoder now rejects that ambiguous
    SEQ candidate and losslessly falls back to another block representation;
    terminal long literal runs remain representable as trailing LL-only entries.
    test_seq_v2 is now 21/21 with a direct rejection case and a deterministic
    end-to-end sparse/random reproducer.
  • Paired pinned in-process decode measurements found +0.40% on text and +1.21%
    on JSON, about +0.80% geometric mean. This is a modest, workload-dependent
    improvement; it does not change the stream or justify a universal speed
    claim.
  • Streaming decode now performs the selected BCJ inverse exactly once when a
    frame completes: after a present footer and checksum have been validated, or
    immediately after the final block for a checksumless frame. Permanent
    roundtrips cover whole and split input for both x86 and AArch64 filters with
    checksum on and off.
  • vv_compress now rejects mode values outside the three public enum constants
    and rejects simultaneous x86 and AArch64 filter requests, including for
    empty input, with VV_ERR_PARAM. The existing 10..24 window-range check now
    runs before any requested BCJ allocation or transform. One-shot decode,
    streaming decode, and frame-info parsing reject input headers that set both
    BCJ architecture bits. The streaming encoder, which cannot transform a whole
    frame while emitting incremental blocks, now rejects invalid modes and all
    BCJ options instead of silently accepting ignored filter requests.
  • Restored reference-decoder parity: Python and JavaScript now consume trailing
    LL-only entries after all matches with the C-equivalent iteration bound,
    avoiding both premature termination and corrupt-input hangs. Both references
    reject contradictory dual-BCJ headers, implement the exact x86/AArch64 BCJ
    inverse after checksum validation, and reproduce current encoder output in
    checksum-on/off cross-language fixtures. C remains canonical for legacy
    H/A/I/C; Python retains limited A-tag support and JavaScript omits the legacy
    tags.
  • The OOM sweep now requires its randomized baseline fixture to roundtrip before
    allocation failure is injected, so a codec correctness regression cannot be
    misreported as an injector-initialization failure.
  • The one-shot BCJ path now calls vv_secure_zero on its private full-input
    working copy before free(), bringing it under the tracked plaintext-buffer
    hygiene policy. test_secure_zero exercises BCJ cleanup completion and
    byte-exact roundtrip under sanitizers; it does not directly inspect freed
    memory contents.
  • Corrected CLI help for -A 0: zero selects the automatic factor, fast=2 and
    balanced/extreme=1; it is not the old hard-off setting.
  • Added the deterministic generated-v1 competitive suite. It generates four
    dependency-free fixtures, requires the vv-fast/vv-balanced/lz4-1/zstd-1/
    zstd-3 matrix by default, reports medians after configurable warm-ups, checks
    every decode by SHA-256, and emits CSV plus provenance-rich JSON. The README
    and comparison guide carry a fresh seven-run pinned-core table separately
    from the retained July 2026 11-file history.
  • Updated release, integration, format, security, and verification documents
    for v2.65.9. The formal-audit update records regression/dynamic validation of
    the delta and explicitly inherits the earlier formal baseline; it does not
    claim a new full formal-tool run. Release publication now lists only the
    source tar.gz artifact.

Source archive

  • vaptvupt-2.65.9-src.tar.gz
  • SHA-256: 436e988b53ce29d3ffa9c02e5763a78002b44b02ef78a8573a581e79f83e0a53
  • The Git tag is signed; verify it with git tag -v v2.65.9.