From: Yann Collet Date: Sun, 22 Nov 2015 11:22:04 +0000 (+0100) Subject: fixed roll buffer lazy2 mode X-Git-Tag: zstd-0.4.0^2~23^2~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a85c77b9d3b8b8056f629ae93aa37b4e182258ba;p=thirdparty%2Fzstd.git fixed roll buffer lazy2 mode --- diff --git a/lib/zstd_compress.c b/lib/zstd_compress.c index ebe060e74..a45fbab31 100644 --- a/lib/zstd_compress.c +++ b/lib/zstd_compress.c @@ -1581,6 +1581,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(ZSTD_CCtx* ctx, const U32 repIndex = (U32)(current - offset_1); const BYTE* const repBase = repIndex < dictLimit ? dictBase : base; const BYTE* const repMatch = repBase + repIndex; + if ((repIndex <= dictLimit-4) || (repIndex >= dictLimit)) if (MEM_read32(ip) == MEM_read32(repMatch)) { /* repcode detected */ @@ -1681,6 +1682,11 @@ size_t ZSTD_compressBlock_lazy_extDict(ZSTD_CCtx* ctx, void* dst, size_t maxDstS return ZSTD_compressBlock_lazy_extDict_generic(ctx, dst, maxDstSize, src, srcSize, 0, 1); } +size_t ZSTD_compressBlock_lazy2_extDict(ZSTD_CCtx* ctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize) +{ + return ZSTD_compressBlock_lazy_extDict_generic(ctx, dst, maxDstSize, src, srcSize, 0, 2); +} + typedef size_t (*ZSTD_blockCompressor) (ZSTD_CCtx* ctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize); @@ -1698,7 +1704,7 @@ static ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, int case ZSTD_lazy: return ZSTD_compressBlock_lazy_extDict; case ZSTD_lazy2: - return ZSTD_compressBlock_lazy2; + return ZSTD_compressBlock_lazy2_extDict; case ZSTD_btlazy2: return ZSTD_compressBlock_btlazy2; }