ref: 487913d9a6355b21cc1cbb73dbf93e64d081e715
parent: 83cb6c0049f6cc5ea3f27d1d90891472f288ac5e
author: Tomas Hoger <[email protected]>
date: Sun Sep 11 05:18:10 EDT 2011
Slightly improve LZW_CLEAR handling. * src/lzw/ftzopen.c (ft_lzwstate_io) <FT_LZW_PHASE_CODE>: Ensure that subsequent (modulo garbage byte(s)) LZW_CLEAR codes are handled as clear codes. This also re-sets old_code and old_char to predictable values, which is a little better than using `random' ones if the code following LZW_CLEAR is invalid.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2011-09-11 Tomas Hoger <[email protected]>
+ Slightly improve LZW_CLEAR handling.
+
+ * src/lzw/ftzopen.c (ft_lzwstate_io) <FT_LZW_PHASE_CODE>:
+ Ensure that subsequent (modulo garbage byte(s)) LZW_CLEAR codes are
+ handled as clear codes. This also re-sets old_code and old_char to
+ predictable values, which is a little better than using `random'
+ ones if the code following LZW_CLEAR is invalid.
+
+2011-09-11 Tomas Hoger <[email protected]>
+
Add explicit LZW decompression stack size limit.
Stack larger than 1<<LZW_MAX_BITS is never needed if prefix table is
--- a/src/lzw/ftzopen.c
+++ b/src/lzw/ftzopen.c
@@ -321,11 +321,12 @@
/* why not LZW_FIRST-256 ? */
state->free_ent = ( LZW_FIRST - 1 ) - 256;
state->buf_clear = 1;
- c = ft_lzwstate_get_code( state );
- if ( c < 0 )
- goto Eof;
- code = (FT_UInt)c;
+ /* not quite right, but at least more predictable */
+ old_code = 0;
+ old_char = 0;
+
+ goto NextCode;
}
in_code = code; /* save code for later */