diff options
author | Daniel Hammerschmid <daniel.hammerschmid@documatrix.com> | 2022-10-04 14:58:33 +0200 |
---|---|---|
committer | Daniel Hammerschmid <daniel.hammerschmid@documatrix.com> | 2022-10-04 15:51:45 +0200 |
commit | efa1e3d197696c35e70ef57f6a861a4a1cf36923 (patch) | |
tree | 83dc08df237082dba1224e71044527a9f8b826a5 /src/cairo-lzw.c | |
parent | 2cfd08664d080ff22e357a5feeca9bc29ec1823c (diff) | |
download | cairo-efa1e3d197696c35e70ef57f6a861a4a1cf36923.tar.gz |
Fix output of EOD code with incorrect code width in _cairo_lzw_compress
LZW compression: If the last input byte caused the code width to
increase, the end-of-data code was still output with the old (not yet
increased) code width.
Diffstat (limited to 'src/cairo-lzw.c')
-rw-r--r-- | src/cairo-lzw.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/cairo-lzw.c b/src/cairo-lzw.c index f27b3c338..58e229d79 100644 --- a/src/cairo-lzw.c +++ b/src/cairo-lzw.c @@ -369,9 +369,6 @@ _cairo_lzw_compress (unsigned char *data, unsigned long *size_in_out) * lookup. */ _lzw_buf_store_bits (&buf, prev, code_bits); - if (bytes_remaining == 0) - break; - LZW_SYMBOL_SET_CODE (*slot, code_next++, prev, next); if (code_next > LZW_BITS_BOUNDARY(code_bits)) @@ -384,6 +381,9 @@ _cairo_lzw_compress (unsigned char *data, unsigned long *size_in_out) code_next = LZW_CODE_FIRST; } } + + if (bytes_remaining == 0) + break; } /* The LZW footer is an end-of-data code. */ |