From: senhuang42 Date: Mon, 2 Nov 2020 15:58:18 +0000 (-0500) Subject: Fix incorrect index increment in merge algorithm X-Git-Tag: v1.4.7~34^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e8501e00b8df6bab69838a7bf40f4f9f479a288f;p=thirdparty%2Fzstd.git Fix incorrect index increment in merge algorithm --- diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 1f274622e..7357a70a2 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -2569,22 +2569,24 @@ size_t ZSTD_getSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs, ZSTD_customFree(dst, ZSTD_defaultCMem); if (format == ZSTD_sf_noBlockDelimiters) { - /* Merge the dummy block delimiters */ size_t i = 0; size_t totalSeqs = zc->seqCollector.seqIndex; - for (; i < totalSeqs; ++i) { + while(i < totalSeqs) { if (seqCollector.seqStart[i].offset == 0 && seqCollector.seqStart[i].matchLength == 0) { /* Merge the block boundary or last literals */ if (i != totalSeqs-1) { /* Add last literals to next sequence, then "delete" this sequence */ seqCollector.seqStart[i+1].litLength += seqCollector.seqStart[i].litLength; - memmove(seqCollector.seqStart+i, seqCollector.seqStart+i+1, (totalSeqs-i-1)*sizeof(ZSTD_sequence)); + memmove(seqCollector.seqStart+i, seqCollector.seqStart+i+1, (totalSeqs-i-1)*sizeof(ZSTD_Sequence)); } totalSeqs--; + } else { + ++i; } } zc->seqCollector.seqIndex = totalSeqs; } + return zc->seqCollector.seqIndex; }