From ac7683de9f149d927172d96eb5eebae54d2c9bf3 Mon Sep 17 00:00:00 2001 From: ddidderr Date: Sat, 18 Jul 2026 10:03:32 +0200 Subject: [PATCH] fix(compress): reuse block-header serializer for sequence APIs The public sequence compression paths still built compressed block headers locally in C, leaving two byte-formatting implementations after the frame-chunk path was migrated. Route both compressed-block branches through the existing Rust serializer while retaining their C-side sequence, entropy, and capacity logic. Test Plan: - `make -B -C lib -j2 lib` -- passed - `make -B -C tests -j2 fuzzer` -- passed - `tests/fuzzer -s4560 -t47 -i48 -v` -- passed - `git diff --cached --check` -- passed --- lib/compress/zstd_compress.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index c3fa01418..ac7067ba8 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -5274,15 +5274,13 @@ ZSTD_compressSequences_internal(ZSTD_CCtx* cctx, FORWARD_IF_ERROR(cBlockSize, "ZSTD_rleCompressBlock failed"); DEBUGLOG(5, "Writing out RLE block, size: %zu", cBlockSize); } else { - U32 cBlockHeader; /* Error checking and repcodes update */ ZSTD_blockState_confirmRepcodesAndEntropyTables(&cctx->blockState); if (cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid) cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check; /* Write block header into beginning of block*/ - cBlockHeader = lastBlock + (((U32)bt_compressed)<<1) + (U32)(compressedSeqsSize << 3); - MEM_writeLE24(op, cBlockHeader); + ZSTD_rust_writeBlockHeader(op, compressedSeqsSize, blockSize, lastBlock); cBlockSize = ZSTD_blockHeaderSize + compressedSeqsSize; DEBUGLOG(5, "Writing out compressed block, size: %zu", cBlockSize); } @@ -5528,7 +5526,6 @@ ZSTD_compressSequencesAndLiterals_internal(ZSTD_CCtx* cctx, */ RETURN_ERROR(cannotProduce_uncompressedBlock, "ZSTD_compressSequencesAndLiterals cannot generate an uncompressed block"); } else { - U32 cBlockHeader; assert(compressedSeqsSize > 1); /* no RLE */ /* Error checking and repcodes update */ ZSTD_blockState_confirmRepcodesAndEntropyTables(&cctx->blockState); @@ -5536,8 +5533,7 @@ ZSTD_compressSequencesAndLiterals_internal(ZSTD_CCtx* cctx, cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check; /* Write block header into beginning of block*/ - cBlockHeader = lastBlock + (((U32)bt_compressed)<<1) + (U32)(compressedSeqsSize << 3); - MEM_writeLE24(op, cBlockHeader); + ZSTD_rust_writeBlockHeader(op, compressedSeqsSize, block.blockSize, lastBlock); cBlockSize = ZSTD_blockHeaderSize + compressedSeqsSize; DEBUGLOG(5, "Writing out compressed block, size: %zu", cBlockSize); }