]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
fixed roll buffer lazy2 mode
authorYann Collet <yann.collet.73@gmail.com>
Sun, 22 Nov 2015 11:22:04 +0000 (12:22 +0100)
committerYann Collet <yann.collet.73@gmail.com>
Sun, 22 Nov 2015 11:22:04 +0000 (12:22 +0100)
lib/zstd_compress.c

index ebe060e74be5beddfbe7f0c39eb481a0b4a4ee22..a45fbab3173fe9c11111669e3d326023f44a5a30 100644 (file)
@@ -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;
         }