From a85c77b9d3b8b8056f629ae93aa37b4e182258ba Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Sun, 22 Nov 2015 12:22:04 +0100 Subject: [PATCH] fixed roll buffer lazy2 mode --- lib/zstd_compress.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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; }