diff options
Diffstat (limited to 'src/cairo-lzw.c')
-rw-r--r-- | src/cairo-lzw.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/cairo-lzw.c b/src/cairo-lzw.c index f27b3c338..e17cdfc1c 100644 --- a/src/cairo-lzw.c +++ b/src/cairo-lzw.c @@ -369,10 +369,10 @@ _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; + if (likely (slot != NULL)) + LZW_SYMBOL_SET_CODE (*slot, code_next, prev, next); - LZW_SYMBOL_SET_CODE (*slot, code_next++, prev, next); + code_next++; if (code_next > LZW_BITS_BOUNDARY(code_bits)) { @@ -384,6 +384,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. */ |