From 660d651317f1693f8ee62714a260670c1fdc7c58 Mon Sep 17 00:00:00 2001 From: suzuki toshiya Date: Sat, 1 Aug 2009 00:30:21 +0900 Subject: [PATCH] bdf: Fix some data types mismatching with their sources. --- ChangeLog | 11 +++++++++++ src/bdf/bdfdrivr.c | 13 ++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2fc961df4..6587c0a6f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2009-07-31 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-31 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; }