]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Fix incorrect index increment in merge algorithm
authorsenhuang42 <senhuang96@fb.com>
Mon, 2 Nov 2020 15:58:18 +0000 (10:58 -0500)
committersenhuang42 <senhuang96@fb.com>
Mon, 2 Nov 2020 15:58:41 +0000 (10:58 -0500)
lib/compress/zstd_compress.c

index 1f274622ea25e75a1c05b613027ae6edd6d060df..7357a70a2795da67df1bc49f08bdae5c26195c9b 100644 (file)
@@ -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;
 }