]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
[lib] Fix bug in loading LDM dictionary in MT mode
authorNick Terrell <terrelln@fb.com>
Thu, 14 May 2020 18:50:48 +0000 (11:50 -0700)
committerNick Terrell <terrelln@fb.com>
Thu, 14 May 2020 18:52:28 +0000 (11:52 -0700)
Exposed when loading a dictionary < LDM minMatch bytes in MT mode.

Test Plan:
```
CC=clang make -j zstreamtest MOREFLAGS="-O0 -fsanitize=address"
./zstreamtest -vv -i100000000 -t1 --newapi -s7065 -t3925297
```

TODO: Add an explicit test that loads a small dictionary in MT mode

lib/compress/zstd_compress.c
lib/compress/zstd_ldm.c

index 33c3b4ecb635bb961ffb11a7b172d87c904f57a1..2cfa93051fd40660e4a5e5a3a9d880b29d95596b 100644 (file)
@@ -2846,7 +2846,7 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_matchState_t* ms,
 
         ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, ichunk);
 
-        if (params->ldmParams.enableLdm && ls != NULL && srcSize >= params->ldmParams.minMatchLength)
+        if (params->ldmParams.enableLdm && ls != NULL)
             ZSTD_ldm_fillHashTable(ls, (const BYTE*)src, (const BYTE*)src + srcSize, &params->ldmParams);
 
         switch(params->cParams.strategy)
index 2a1c2cd62871638a4b680a77f4ae08d48203521a..22f3628070a2a5cd9ceaf5c123dfb3417a993aa1 100644 (file)
@@ -228,11 +228,13 @@ void ZSTD_ldm_fillHashTable(
             ldmState_t* state, const BYTE* ip,
             const BYTE* iend, ldmParams_t const* params)
 {
-    U64 startingHash = ZSTD_rollingHash_compute(ip, params->minMatchLength);
-    ZSTD_ldm_fillLdmHashTable(
-        state, startingHash, ip, iend - params->minMatchLength, state->window.base,
-        params->hashLog - params->bucketSizeLog,
-        *params);
+    if ((size_t)(iend - ip) >= params->minMatchLength) {
+        U64 startingHash = ZSTD_rollingHash_compute(ip, params->minMatchLength);
+        ZSTD_ldm_fillLdmHashTable(
+            state, startingHash, ip, iend - params->minMatchLength, state->window.base,
+            params->hashLog - params->bucketSizeLog,
+            *params);
+    }
 }