diff --git a/ChangeLog b/ChangeLog index c7c7b147b..8d0ee9ff5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2009-07-03 suzuki toshiya + + bdf: Fix some data types mismatching with their sources. + + * src/bdf/bdrdrivr.c (bdf_cmap_char_index): The type + of `code' is matched with BDF_encoding_el->enc. + (bdf_cmap_char_next): The type of `charcode' is + matched with BDF_encoding_el->enc. When *acharcode + is set by charcode, an overflow is checked and + casted to unsigned 32-bit integer. + 2009-07-03 suzuki toshiya autofit: Improve Unicode range definitions. diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c index f681c41cf..4a91659a5 100644 --- a/src/bdf/bdfdrivr.c +++ b/src/bdf/bdfdrivr.c @@ -101,7 +101,7 @@ THE SOFTWARE. while ( min < max ) { - FT_UInt32 code; + FT_ULong code; mid = ( min + max ) >> 1; @@ -133,7 +133,7 @@ THE SOFTWARE. BDF_encoding_el* encodings = cmap->encodings; FT_ULong min, max, mid; /* num_encodings */ FT_UShort result = 0; /* encodings->glyph */ - FT_UInt32 charcode = *acharcode + 1; + FT_ULong charcode = *acharcode + 1; min = 0; @@ -169,7 +169,14 @@ THE SOFTWARE. } Exit: - *acharcode = charcode; + if ( charcode > 0xFFFFFFFFUL ) + { + FT_TRACE1(( "bdf_cmap_char_next: charcode 0x%x > 32bit API" )); + *acharcode = 0; + /* XXX: result should be changed to indicate an overflow error */ + } + else + *acharcode = (FT_UInt32)charcode; return result; }