In lzma_read_match_distances(), don't use
authorLasse Collin <lasse.collin@tukaani.org>
Mon, 14 Jan 2008 10:08:02 +0000 (12:08 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Mon, 14 Jan 2008 10:08:02 +0000 (12:08 +0200)
coder->lz.stream_end_was_reached. That variable
will be removed, and the check isn't required anyway.
Rearrange the check so that it doesn't make one to
think that there could be an integer overflow.

src/liblzma/lzma/lzma_encoder_private.h

index 7fb1566..9ecbc1c 100644 (file)
@@ -197,12 +197,12 @@ lzma_read_match_distances(lzma_coder *coder,
                        uint32_t limit = MATCH_MAX_LEN - *len_res;
 
                        assert(offset + limit < coder->lz.keep_size_after);
+                       assert(coder->lz.read_pos <= coder->lz.write_pos);
 
                        // If we are close to end of the stream, we may need
                        // to limit the length of the match.
-                       if (coder->lz.stream_end_was_reached
-                                       && coder->lz.write_pos
-                                       < coder->lz.read_pos + offset + limit)
+                       if (coder->lz.write_pos - coder->lz.read_pos
+                                       < offset + limit)
                                limit = coder->lz.write_pos
                                        - (coder->lz.read_pos + offset);