Fizing litLength == 0 case

This commit is contained in:
Bimba Shrestha
2019-09-10 10:38:13 -07:00
parent 9e7bb55e14
commit e3c5825918
+15 -4
View File
@@ -2291,11 +2291,22 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc)
outSeqs[i].rep = 1;
repIdx = i - outSeqs[i].offset;
/* Not first block */
if (repIdx >= 0) {
outSeqs[i].offset = outSeqs[repIdx].offset;
}
if (repIdx == -1) {
/* Special case where litLength == 0 */
if (outSeqs[i].litLength == 0) {
/* When the offset is 3 */
if (outSeqs[i].offset > 2) {
outSeqs[i].offset = outSeqs[repIdx - 1].offset - 1;
/* When the offset is either 1 or 2 */
} else {
outSeqs[i].offset = outSeqs[repIdx - 1].offset;
}
} else {
outSeqs[i].offset = outSeqs[repIdx].offset;
}
/* First block */
} else if (repIdx == -1) {
outSeqs[i].offset = 1;
} else if (repIdx == -2) {
outSeqs[i].offset = 4;