From: W. Felix Handte Date: Mon, 9 Sep 2019 19:12:14 +0000 (-0400) Subject: Fix workspaceTooSmall Calculation X-Git-Tag: v1.4.4~1^2~57^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e3703825a843b04be0aff3ff38336ee5188ea84c;p=thirdparty%2Fzstd.git Fix workspaceTooSmall Calculation --- diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index cbda17b8c..7adcb7c1e 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -1488,13 +1488,15 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc, size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params.ldmParams, blockSize); /* Check if workspace is large enough, alloc a new one if needed */ - { size_t const entropySpace = HUF_WORKSPACE_SIZE; + { size_t const cctxSpace = zc->staticSize ? sizeof(ZSTD_CCtx) : 0; + size_t const entropySpace = HUF_WORKSPACE_SIZE; size_t const blockStateSpace = 2 * sizeof(ZSTD_compressedBlockState_t); size_t const bufferSpace = buffInSize + buffOutSize; size_t const ldmSpace = ZSTD_ldm_getTableSize(params.ldmParams); size_t const ldmSeqSpace = maxNbLdmSeq * sizeof(rawSeq); size_t const neededSpace = + cctxSpace + entropySpace + blockStateSpace + ldmSpace + @@ -1503,7 +1505,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc, tokenSpace + bufferSpace; - int const workspaceTooSmall = !ZSTD_cwksp_check_available(ws, neededSpace); + int const workspaceTooSmall = ZSTD_cwksp_sizeof(ws) < neededSpace; int const workspaceWasteful = ZSTD_cwksp_check_wasteful(ws, neededSpace); DEBUGLOG(4, "Need %zuKB workspace, including %zuKB for match state, and %zuKB for buffers",