Merge pull request #4626 from kevinjzhang/fix-high-memory-usage
Fix unintended high memory usage
This commit is contained in:
@@ -152,7 +152,11 @@ void ZSTD_ldm_adjustParameters(ldmParams_t* params,
|
||||
}
|
||||
}
|
||||
if (params->hashLog == 0) {
|
||||
params->hashLog = BOUNDED(ZSTD_HASHLOG_MIN, params->windowLog - params->hashRateLog, ZSTD_HASHLOG_MAX);
|
||||
if (params->windowLog <= params->hashRateLog) {
|
||||
params->hashLog = ZSTD_HASHLOG_MIN;
|
||||
} else {
|
||||
params->hashLog = BOUNDED(ZSTD_HASHLOG_MIN, params->windowLog - params->hashRateLog, ZSTD_HASHLOG_MAX);
|
||||
}
|
||||
}
|
||||
if (params->minMatchLength == 0) {
|
||||
params->minMatchLength = LDM_MIN_MATCH_LENGTH;
|
||||
|
||||
@@ -1414,6 +1414,37 @@ static int basicUnitTests(U32 const seed, double compressibility)
|
||||
}
|
||||
DISPLAYLEVEL(3, "OK \n");
|
||||
|
||||
DISPLAYLEVEL(3, "test%3i : ldm hashRateLog > windowLog underflow check : ", testNb++);
|
||||
{
|
||||
/* Test that when windowLog < hashRateLog, we don't get excessive memory usage
|
||||
* due to underflow in hashLog calculation (windowLog - hashRateLog). */
|
||||
ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
||||
|
||||
size_t const size = (1U << 10); // 1 KB
|
||||
size_t const dstCapacity = ZSTD_compressBound(size);
|
||||
void* src = (void*)malloc(size);
|
||||
void* dst = (void*)malloc(dstCapacity);
|
||||
|
||||
RDG_genBuffer(src, size, 0.5, 0.5, seed);
|
||||
|
||||
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_enableLongDistanceMatching, ZSTD_ps_enable));
|
||||
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_ldmHashLog, 0));
|
||||
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_windowLog, 12));
|
||||
CHECK_Z(ZSTD_CCtx_setParameter(cctx, ZSTD_c_ldmHashRateLog, 13));
|
||||
|
||||
CHECK_Z(ZSTD_compress2(cctx, dst, dstCapacity, src, size));
|
||||
|
||||
{ size_t const cctxSize = ZSTD_sizeof_CCtx(cctx);
|
||||
DISPLAYLEVEL(3, "CCtx size: %u bytes ", (unsigned)cctxSize);
|
||||
CHECK_LT(cctxSize, 50 MB);
|
||||
}
|
||||
|
||||
ZSTD_freeCCtx(cctx);
|
||||
free(src);
|
||||
free(dst);
|
||||
}
|
||||
DISPLAYLEVEL(3, "OK \n");
|
||||
|
||||
DISPLAYLEVEL(3, "test%3i : testing dict compression with enableLdm and forceMaxWindow : ", testNb++);
|
||||
{
|
||||
ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
||||
|
||||
Reference in New Issue
Block a user