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.
This commit is contained in:
Tomas Hoger 2011-09-11 09:18:10 +02:00 committed by Werner Lemberg
parent 83cb6c0049
commit 487913d9a6
2 changed files with 15 additions and 4 deletions

View File

@ -1,3 +1,13 @@
2011-09-11 Tomas Hoger <thoger@redhat.com>
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 <thoger@redhat.com> 2011-09-11 Tomas Hoger <thoger@redhat.com>
Add explicit LZW decompression stack size limit. Add explicit LZW decompression stack size limit.

View File

@ -321,11 +321,12 @@
/* why not LZW_FIRST-256 ? */ /* why not LZW_FIRST-256 ? */
state->free_ent = ( LZW_FIRST - 1 ) - 256; state->free_ent = ( LZW_FIRST - 1 ) - 256;
state->buf_clear = 1; 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 */ in_code = code; /* save code for later */