From: W. Felix Handte Date: Wed, 2 Sep 2020 21:29:46 +0000 (-0400) Subject: Only Insert Positions Inside the Chain Window X-Git-Tag: v1.4.7~80^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66509c7bf42dda5c76e2269f20392fd44cd0fd0f;p=thirdparty%2Fzstd.git Only Insert Positions Inside the Chain Window --- diff --git a/lib/compress/zstd_lazy.c b/lib/compress/zstd_lazy.c index 5ce805326..c61f8aee4 100644 --- a/lib/compress/zstd_lazy.c +++ b/lib/compress/zstd_lazy.c @@ -480,8 +480,10 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B { U32 const target = (U32)(ip - ms->window.base); U32* const chainTable = ms->chainTable; - U32 const chainMask = (1 << ms->cParams.chainLog) - 1; + U32 const chainSize = 1 << ms->cParams.chainLog; + U32 const chainMask = chainSize - 1; U32 idx = ms->nextToUpdate; + U32 const minChain = chainSize > target ? 0 : target - chainSize; U32 bucketSize = 1 << ZSTD_LAZY_DDSS_BUCKET_LOG; for ( ; idx < target; idx++) { U32 i; @@ -493,7 +495,9 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B for (i = bucketSize - 1; i; i--) ms->hashTable[h + i] = ms->hashTable[h + i - 1]; /* Insert new position. */ - chainTable[idx & chainMask] = ms->hashTable[h]; + if (idx >= minChain) { + chainTable[idx & chainMask] = ms->hashTable[h]; + } ms->hashTable[h] = idx; }