From f4206073331e192149c62c41a0dec0dc6886abfc Mon Sep 17 00:00:00 2001 From: zxzxzzz Date: Mon, 13 Dec 2021 17:54:32 +0800 Subject: [PATCH] fix-entropy-repead-mode-bug --- ...patch-10-fix-entropy-repead-mode-bug.patch | 40 +++++++++++++++++++ zstd.spec | 6 ++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 backport-zstd-1.5.0-patch-10-fix-entropy-repead-mode-bug.patch diff --git a/backport-zstd-1.5.0-patch-10-fix-entropy-repead-mode-bug.patch b/backport-zstd-1.5.0-patch-10-fix-entropy-repead-mode-bug.patch new file mode 100644 index 0000000..db6751f --- /dev/null +++ b/backport-zstd-1.5.0-patch-10-fix-entropy-repead-mode-bug.patch @@ -0,0 +1,40 @@ +diff -Nur zstd-1.5.0/lib/compress/zstd_compress.c zstd-new/lib/compress/zstd_compress.c +--- zstd-1.5.0/lib/compress/zstd_compress.c 2021-05-14 22:59:34.000000000 +0800 ++++ zstd-new/lib/compress/zstd_compress.c 2021-12-13 17:44:08.718050534 +0800 +@@ -3321,6 +3321,7 @@ + */ + static size_t ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(seqStore_t* seqStore, const ZSTD_CCtx* zc) { + ZSTD_entropyCTablesMetadata_t entropyMetadata; ++ DEBUGLOG(6, "ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize()"); + FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(seqStore, + &zc->blockState.prevCBlock->entropy, + &zc->blockState.nextCBlock->entropy, +@@ -3499,9 +3500,6 @@ + return 0; + } + +- if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid) +- zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check; +- + if (cSeqsSize == 0) { + cSize = ZSTD_noCompressBlock(op, dstCapacity, ip, srcSize, lastBlock); + FORWARD_IF_ERROR(cSize, "Nocompress block failed"); +@@ -3518,6 +3516,10 @@ + cSize = ZSTD_blockHeaderSize + cSeqsSize; + DEBUGLOG(4, "Writing out compressed block, size: %zu", cSize); + } ++ ++ if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid) ++ zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check; ++ + return cSize; + } + +@@ -3553,6 +3555,7 @@ + size_t midIdx = (startIdx + endIdx)/2; + + if (endIdx - startIdx < MIN_SEQUENCES_BLOCK_SPLITTING || splits->idx >= MAX_NB_SPLITS) { ++ DEBUGLOG(6, "ZSTD_deriveBlockSplitsHelper: Too few sequences"); + return; + } + ZSTD_deriveSeqStoreChunk(&fullSeqStoreChunk, origSeqStore, startIdx, endIdx); diff --git a/zstd.spec b/zstd.spec index 28c3a03..14202da 100644 --- a/zstd.spec +++ b/zstd.spec @@ -2,7 +2,7 @@ Name: zstd Version: 1.5.0 -Release: 12 +Release: 13 Summary: A fast lossless compression algorithm License: BSD and GPLv2 URL: https://github.com/facebook/zstd @@ -17,6 +17,7 @@ Patch6: backport-zstd-1.5.0-patch-6-fix-a-determinism-bug-with-the-DUBT Patch7: patch-7-add-test-case.patch Patch8: patch-8-fix-extra-newline-gets-printes-out-when-compressing-multiple-files.patch Patch9: patch-9-add-test-c-result-print.patch +Patch10: backport-zstd-1.5.0-patch-10-fix-entropy-repead-mode-bug.patch BuildRequires: gtest-devel gcc-c++ pkg-config @@ -95,6 +96,9 @@ install -D -m644 programs/zstd.1 %{buildroot}%{_mandir}/man1/pzstd.1 %{_mandir}/man1/*.1* %changelog +* Mon Dec 13 2021 zhangxiao - 1.5.0.13 +* fix entropy repead mode bug + * Fri Dec 13 2021 liushiyuan - 1.5.0.12 * add test c result print -- Gitee