summaryrefslogtreecommitdiff
path: root/src/cairo-lzw.c
diff options
context:
space:
mode:
authorDaniel Hammerschmid <daniel.hammerschmid@documatrix.com>2022-10-04 14:58:33 +0200
committerDaniel Hammerschmid <daniel.hammerschmid@documatrix.com>2022-10-04 15:51:45 +0200
commitefa1e3d197696c35e70ef57f6a861a4a1cf36923 (patch)
tree83dc08df237082dba1224e71044527a9f8b826a5 /src/cairo-lzw.c
parent2cfd08664d080ff22e357a5feeca9bc29ec1823c (diff)
downloadcairo-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.c6
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. */