summaryrefslogtreecommitdiff
path: root/Build/source/libs/freetype2/freetype-src/src/lzw
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-09-13 10:10:45 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-09-13 10:10:45 +0000
commita8951d1db45ca51c96ffa2c431777eb37c8a2f94 (patch)
treebcaa37c326975a1771aaf85bb9a2675127f22729 /Build/source/libs/freetype2/freetype-src/src/lzw
parent873f349d7e0ae42e35ccf4d96fce5a6cfa685fe6 (diff)
freetype 2.7.0
git-svn-id: svn://tug.org/texlive/trunk@42052 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/freetype2/freetype-src/src/lzw')
-rw-r--r--Build/source/libs/freetype2/freetype-src/src/lzw/ftzopen.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Build/source/libs/freetype2/freetype-src/src/lzw/ftzopen.c b/Build/source/libs/freetype2/freetype-src/src/lzw/ftzopen.c
index e17b3c5247a..9e66ba983f3 100644
--- a/Build/source/libs/freetype2/freetype-src/src/lzw/ftzopen.c
+++ b/Build/source/libs/freetype2/freetype-src/src/lzw/ftzopen.c
@@ -42,7 +42,12 @@
state->buf_total += count;
state->in_eof = FT_BOOL( count < state->num_bits );
state->buf_offset = 0;
- state->buf_size = ( state->buf_size << 3 ) - ( state->num_bits - 1 );
+
+ state->buf_size <<= 3;
+ if ( state->buf_size > state->num_bits )
+ state->buf_size -= state->num_bits - 1;
+ else
+ return -1; /* not enough data */
if ( count == 0 ) /* end of file */
return -1;
@@ -66,7 +71,10 @@
{
if ( state->free_ent >= state->free_bits )
{
- state->num_bits = ++num_bits;
+ state->num_bits = ++num_bits;
+ if ( num_bits > LZW_MAX_BITS )
+ return -1;
+
state->free_bits = state->num_bits < state->max_bits
? (FT_UInt)( ( 1UL << num_bits ) - 256 )
: state->max_free + 1;