From: W. Felix Handte Date: Wed, 9 May 2018 20:46:57 +0000 (-0400) Subject: Existing Repcode Check Only Applies to noDict Case X-Git-Tag: v1.3.5~3^2~37^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a25f7ef5b10c4965a1700eaa44e067154e7ad7f;p=thirdparty%2Fzstd.git Existing Repcode Check Only Applies to noDict Case --- diff --git a/lib/compress/zstd_double_fast.c b/lib/compress/zstd_double_fast.c index 2bcd4b5d0..0b8cba13e 100644 --- a/lib/compress/zstd_double_fast.c +++ b/lib/compress/zstd_double_fast.c @@ -112,8 +112,8 @@ size_t ZSTD_compressBlock_doubleFast_generic( const BYTE* match = base + matchIndexS; hashLong[h2] = hashSmall[h] = current; /* update hash tables */ - assert(offset_1 <= current); /* supposed guaranteed by construction */ - if ((offset_1 > 0) & (MEM_read32(ip+1-offset_1) == MEM_read32(ip+1))) { + if (dictMode == ZSTD_noDict && ((offset_1 > 0) & (MEM_read32(ip+1-offset_1) == MEM_read32(ip+1)))) { + assert(offset_1 <= current); /* supposed guaranteed by construction */ /* favor repcode */ mLength = ZSTD_count(ip+1+4, ip+1+4-offset_1, iend) + 4; ip++; @@ -162,7 +162,8 @@ size_t ZSTD_compressBlock_doubleFast_generic( hashSmall[ZSTD_hashPtr(ip-2, hBitsS, mls)] = (U32)(ip-2-base); /* check immediate repcode */ - while ( (ip <= ilimit) + while ( dictMode == ZSTD_noDict + && (ip <= ilimit) && ( (offset_2>0) & (MEM_read32(ip) == MEM_read32(ip - offset_2)) )) { /* store sequence */