From: W. Felix Handte Date: Thu, 10 May 2018 21:17:10 +0000 (-0400) Subject: Force Working Context Indices Greater than Dict Indices X-Git-Tag: v1.3.5~3^2~44^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d598e6fedd798086894f953fbc44b189bca746a;p=thirdparty%2Fzstd.git Force Working Context Indices Greater than Dict Indices --- diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index f0576f081..e05882684 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -1229,6 +1229,17 @@ static size_t ZSTD_resetCCtx_usingCDict(ZSTD_CCtx* cctx, if (attachDict) { DEBUGLOG(4, "attaching dictionary into context"); cctx->blockState.matchState.dictMatchState = &cdict->matchState; + + /* prep working match state so dict matches never have negative indices + * when they are translated to the working context's index space. */ + if (cctx->blockState.matchState.window.dictLimit < + (U32)(cdict->matchState.window.nextSrc - cdict->matchState.window.base)) { + cctx->blockState.matchState.window.nextSrc = + cctx->blockState.matchState.window.base + + ( cdict->matchState.window.nextSrc + - cdict->matchState.window.base); + ZSTD_window_clear(&cctx->blockState.matchState.window); + } } else { DEBUGLOG(4, "copying dictionary into context"); /* copy tables */