summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2009-07-03 18:01:25 +0900
committersuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2009-07-03 18:01:25 +0900
commit436db93a5865df53e741bb3a74d25c50b991bf0e (patch)
tree83d2551739ca677067fb45e7e3c5e933e4b2b333
parent20be5c0b58080298d046186b9f7f4ffff4060439 (diff)
downloadfreetype2-436db93a5865df53e741bb3a74d25c50b991bf0e.tar.gz
bdf: Fix some data types mismatching with their sources.
-rw-r--r--ChangeLog11
-rw-r--r--src/bdf/bdfdrivr.c13
2 files changed, 21 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c7c7b147b..8d0ee9ff5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
}