Don't Attach Empty Dict Contents
In weird corner cases, they produce unexpected results...dev
parent
9c92223468
commit
582b7f85ed
|
@ -1227,20 +1227,25 @@ static size_t ZSTD_resetCCtx_usingCDict(ZSTD_CCtx* cctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attachDict) {
|
if (attachDict) {
|
||||||
DEBUGLOG(4, "attaching dictionary into context");
|
if (cdict->matchState.window.nextSrc - cdict->matchState.window.base == 0) {
|
||||||
cctx->blockState.matchState.dictMatchState = &cdict->matchState;
|
/* don't even attach dictionaries with no contents */
|
||||||
|
DEBUGLOG(4, "skipping attaching empty dictionary");
|
||||||
|
} else {
|
||||||
|
DEBUGLOG(4, "attaching dictionary into context");
|
||||||
|
cctx->blockState.matchState.dictMatchState = &cdict->matchState;
|
||||||
|
|
||||||
/* prep working match state so dict matches never have negative indices
|
/* prep working match state so dict matches never have negative indices
|
||||||
* when they are translated to the working context's index space. */
|
* when they are translated to the working context's index space. */
|
||||||
if (cctx->blockState.matchState.window.dictLimit <
|
if (cctx->blockState.matchState.window.dictLimit <
|
||||||
(U32)(cdict->matchState.window.nextSrc - cdict->matchState.window.base)) {
|
(U32)(cdict->matchState.window.nextSrc - cdict->matchState.window.base)) {
|
||||||
cctx->blockState.matchState.window.nextSrc =
|
cctx->blockState.matchState.window.nextSrc =
|
||||||
cctx->blockState.matchState.window.base +
|
cctx->blockState.matchState.window.base +
|
||||||
( cdict->matchState.window.nextSrc
|
( cdict->matchState.window.nextSrc
|
||||||
- cdict->matchState.window.base);
|
- cdict->matchState.window.base);
|
||||||
ZSTD_window_clear(&cctx->blockState.matchState.window);
|
ZSTD_window_clear(&cctx->blockState.matchState.window);
|
||||||
|
}
|
||||||
|
cctx->blockState.matchState.loadedDictEnd = cctx->blockState.matchState.window.dictLimit;
|
||||||
}
|
}
|
||||||
cctx->blockState.matchState.loadedDictEnd = cctx->blockState.matchState.window.dictLimit;
|
|
||||||
} else {
|
} else {
|
||||||
DEBUGLOG(4, "copying dictionary into context");
|
DEBUGLOG(4, "copying dictionary into context");
|
||||||
/* copy tables */
|
/* copy tables */
|
||||||
|
|
Loading…
Reference in New Issue