]> granicus.if.org Git - xz/commitdiff
Prevent LZ encoder from hanging with known uncompressed v4.999.3alpha
authorLasse Collin <lasse.collin@tukaani.org>
Fri, 25 Apr 2008 12:39:50 +0000 (15:39 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 25 Apr 2008 12:39:50 +0000 (15:39 +0300)
size. The "fix" breaks LZMA_SYNC_FLUSH at end of stream
with known uncompressed size, but since it currently seems
likely that support for encoding with known uncompressed
size will go away anyway, I'm not fixing this problem now.

src/liblzma/lz/lz_encoder.c

index fd1be9a7126db366d642d1eb286033927ee5a9e5..03f8fa94507d69398e4713d9ee670d6d1dd0c63d 100644 (file)
@@ -441,8 +441,13 @@ fill_window(lzma_coder *coder, lzma_allocator *allocator, const uint8_t *in,
        // works correctly, because the next encoder cannot have any more
        // output left to be produced. If it had, then our known Uncompressed
        // Size would be invalid, which would mean that we have a bad bug.
-       if (ret == LZMA_OK && coder->lz.uncompressed_size == 0)
-               coder->lz.sequence = SEQ_FINISH;
+//     if (ret == LZMA_OK && coder->lz.uncompressed_size == 0)
+//             coder->lz.sequence = SEQ_FINISH;
+       // The above breaks normal encoding with known uncompressed size
+       // if input chunk size is a multiple of uncompressed size. Commenting
+       // the above out breaks LZMA_SYNC_FLUSH at end of stream whose
+       // uncompressed size is known. Support for encoding with known
+       // uncompressed may get dropped completely so I won't fix this now.
 
        // Restart the match finder after finished LZMA_SYNC_FLUSH.
        if (coder->lz.pending > 0