]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Checking noCompressBlock explicitly for rep code confirmation
authorBimba Shrestha <bimbashrestha@fb.com>
Thu, 21 Nov 2019 21:06:26 +0000 (13:06 -0800)
committerBimba Shrestha <bimbashrestha@fb.com>
Thu, 21 Nov 2019 21:06:26 +0000 (13:06 -0800)
lib/compress/zstd_compress.c

index 064a38ffcfb2ce549f6fe38051b02c2e7e24313e..f8c64994bf6d1afb98d1e535c64972e29917803c 100644 (file)
@@ -2470,8 +2470,10 @@ static size_t ZSTD_compressBlock_targetCBlockSize(ZSTD_CCtx* zc,
      * encode using ZSTD_noCompressSuperBlock writing sub blocks
      * in uncompressed mode.
      */
+    int usingNoCompressSuperBlock = 0;
     if (cSize == 0) {
         cSize = ZSTD_noCompressSuperBlock(dst, dstCapacity, src, srcSize, zc->appliedParams.targetCBlockSize, lastBlock);
+        usingNoCompressSuperBlock = 1;
         /* In compression, there is an assumption that a compressed block is always
          * within the size of ZSTD_compressBound(). However, SuperBlock compression
          * can exceed the limit due to overhead of headers from SubBlocks.
@@ -2511,7 +2513,7 @@ static size_t ZSTD_compressBlock_targetCBlockSize(ZSTD_CCtx* zc,
         }
     }
 
-    if (!ZSTD_isError(cSize) && cSize != 0) {
+    if (!ZSTD_isError(cSize) && !usingNoCompressSuperBlock) {
         /* confirm repcodes and entropy tables when emitting a compressed block */
         ZSTD_compressedBlockState_t* const tmp = zc->blockState.prevCBlock;
         zc->blockState.prevCBlock = zc->blockState.nextCBlock;