diff options
author | suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> | 2009-07-03 18:01:25 +0900 |
---|---|---|
committer | suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> | 2009-07-03 18:01:25 +0900 |
commit | 436db93a5865df53e741bb3a74d25c50b991bf0e (patch) | |
tree | 83d2551739ca677067fb45e7e3c5e933e4b2b333 | |
parent | 20be5c0b58080298d046186b9f7f4ffff4060439 (diff) | |
download | freetype2-436db93a5865df53e741bb3a74d25c50b991bf0e.tar.gz |
bdf: Fix some data types mismatching with their sources.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | src/bdf/bdfdrivr.c | 13 |
2 files changed, 21 insertions, 3 deletions
@@ -1,5 +1,16 @@ 2009-07-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> + 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 <mpsuzuki@hiroshima-u.ac.jp> + autofit: Improve Unicode range definitions. * src/autofit/aftypes.h (AF_UNIRANGE_REC): New macro 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; } |