[lib] Fix bug in loading LDM dictionary in MT mode
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
This commit is contained in:
parent
0208eeccd6
commit
add7ed2d4a
@ -2846,7 +2846,7 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_matchState_t* ms,
|
|||||||
|
|
||||||
ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, ichunk);
|
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, ¶ms->ldmParams);
|
ZSTD_ldm_fillHashTable(ls, (const BYTE*)src, (const BYTE*)src + srcSize, ¶ms->ldmParams);
|
||||||
|
|
||||||
switch(params->cParams.strategy)
|
switch(params->cParams.strategy)
|
||||||
|
@ -228,11 +228,13 @@ void ZSTD_ldm_fillHashTable(
|
|||||||
ldmState_t* state, const BYTE* ip,
|
ldmState_t* state, const BYTE* ip,
|
||||||
const BYTE* iend, ldmParams_t const* params)
|
const BYTE* iend, ldmParams_t const* params)
|
||||||
{
|
{
|
||||||
|
if ((size_t)(iend - ip) >= params->minMatchLength) {
|
||||||
U64 startingHash = ZSTD_rollingHash_compute(ip, params->minMatchLength);
|
U64 startingHash = ZSTD_rollingHash_compute(ip, params->minMatchLength);
|
||||||
ZSTD_ldm_fillLdmHashTable(
|
ZSTD_ldm_fillLdmHashTable(
|
||||||
state, startingHash, ip, iend - params->minMatchLength, state->window.base,
|
state, startingHash, ip, iend - params->minMatchLength, state->window.base,
|
||||||
params->hashLog - params->bucketSizeLog,
|
params->hashLog - params->bucketSizeLog,
|
||||||
*params);
|
*params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user