[lib] Fix dictionary + repcodes + optimal parser
parent
4b88bd3ee0
commit
6d687a8816
|
@ -569,7 +569,10 @@ U32 ZSTD_insertBtAndGetAllMatches (
|
||||||
U32 repLen = 0;
|
U32 repLen = 0;
|
||||||
assert(current >= dictLimit);
|
assert(current >= dictLimit);
|
||||||
if (repOffset-1 /* intentional overflow, discards 0 and -1 */ < current-dictLimit) { /* equivalent to `current > repIndex >= dictLimit` */
|
if (repOffset-1 /* intentional overflow, discards 0 and -1 */ < current-dictLimit) { /* equivalent to `current > repIndex >= dictLimit` */
|
||||||
if (ZSTD_readMINMATCH(ip, minMatch) == ZSTD_readMINMATCH(ip - repOffset, minMatch)) {
|
/* We must validate the repcode offset because when we're using a dictionary the
|
||||||
|
* valid offset range shrinks when the dictionary goes out of bounds.
|
||||||
|
*/
|
||||||
|
if ((repIndex >= windowLow) & (ZSTD_readMINMATCH(ip, minMatch) == ZSTD_readMINMATCH(ip - repOffset, minMatch))) {
|
||||||
repLen = (U32)ZSTD_count(ip+minMatch, ip+minMatch-repOffset, iLimit) + minMatch;
|
repLen = (U32)ZSTD_count(ip+minMatch, ip+minMatch-repOffset, iLimit) + minMatch;
|
||||||
}
|
}
|
||||||
} else { /* repIndex < dictLimit || repIndex >= current */
|
} else { /* repIndex < dictLimit || repIndex >= current */
|
||||||
|
|
Loading…
Reference in New Issue