]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Handle Non-Static CCtxes in Estimation
authorW. Felix Handte <w@felixhandte.com>
Tue, 12 May 2020 20:27:45 +0000 (16:27 -0400)
committerW. Felix Handte <w@felixhandte.com>
Tue, 12 May 2020 20:54:33 +0000 (16:54 -0400)
lib/compress/zstd_compress.c

index 7f6da55fbdfb46eb85cc0f490a12510b3198e0a7..a0222ebce079724c38e70f9b6ed980c2bd56e3be 100644 (file)
@@ -1129,6 +1129,7 @@ ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
 static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
         const ZSTD_compressionParameters* cParams,
         const ldmParams_t* ldmParams,
+        const int isStatic,
         const size_t buffInSize,
         const size_t buffOutSize,
         const size_t pledgedSrcSize)
@@ -1152,7 +1153,7 @@ static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
     size_t const bufferSpace = ZSTD_cwksp_alloc_size(buffInSize)
                              + ZSTD_cwksp_alloc_size(buffOutSize);
 
-    size_t const cctxSpace = ZSTD_cwksp_alloc_size(sizeof(ZSTD_CCtx));
+    size_t const cctxSpace = isStatic ? ZSTD_cwksp_alloc_size(sizeof(ZSTD_CCtx)) : 0;
 
     size_t const neededSpace =
         cctxSpace +
@@ -1178,7 +1179,7 @@ size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params)
      * be needed. However, we still allocate two 0-sized buffers, which can
      * take space under ASAN. */
     return ZSTD_estimateCCtxSize_usingCCtxParams_internal(
-        &cParams, &params->ldmParams, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN);
+        &cParams, &params->ldmParams, 1, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN);
 }
 
 size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams)
@@ -1214,7 +1215,7 @@ size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params)
         size_t const outBuffSize = ZSTD_compressBound(blockSize) + 1;
 
         return ZSTD_estimateCCtxSize_usingCCtxParams_internal(
-            &cParams, &params->ldmParams, inBuffSize, outBuffSize,
+            &cParams, &params->ldmParams, 1, inBuffSize, outBuffSize,
             ZSTD_CONTENTSIZE_UNKNOWN);
     }
 }
@@ -1473,7 +1474,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
         {
             size_t const neededSpace =
                 ZSTD_estimateCCtxSize_usingCCtxParams_internal(
-                    &params.cParams, &params.ldmParams,
+                    &params.cParams, &params.ldmParams, zc->staticSize != 0,
                     buffInSize, buffOutSize, pledgedSrcSize);
 
             int const workspaceTooSmall = ZSTD_cwksp_sizeof(ws) < neededSpace;