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 0000000000000000000000000000000000000000..db6751fb1f8cf98d92e597df11e77f2b72a5ebc5 --- /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 28c3a0336ca7e42525e321f8efa101aac60bc0f5..14202daff8a5ee8c5ef2a69879c49edbaa7c5573 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