diff options
author | suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> | 2009-07-03 18:01:40 +0900 |
---|---|---|
committer | suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> | 2009-07-03 18:01:40 +0900 |
commit | 7c67ddbf033a6ad594fec57d52fb5924d0e541fe (patch) | |
tree | 13d84232bd66e14674052f5f689ef689780e9fbf | |
parent | 1e1cb06cf96f27e9a4fcd05a08aa7c0bc80ddbbd (diff) | |
download | freetype2-7c67ddbf033a6ad594fec57d52fb5924d0e541fe.tar.gz |
sfnt: Ignore invalid GIDs in glyph name lookup.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | include/freetype/internal/fttrace.h | 1 | ||||
-rw-r--r-- | src/sfnt/sfdriver.c | 25 |
3 files changed, 33 insertions, 4 deletions
@@ -1,5 +1,16 @@ 2009-07-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> + sfnt: Ignore invalid GIDs in glyph name lookup. + + * include/freetype/internal/fttrace.h: + New trace module for sfdriver.c is added. + + * src/sfnt/sfdriver.c (sfnt_get_name_index): + Restrict glyph name lookup to FT_UInt GID. + Genuine TrueType can hold 16-bit glyphs. + +2009-07-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp> + pcf: Fix a comparison between FT_Long and FT_ULong. * src/pcf/pcfread.c (pcf_get_bitmaps): Return an error diff --git a/include/freetype/internal/fttrace.h b/include/freetype/internal/fttrace.h index 893bddeae..2da65b1cb 100644 --- a/include/freetype/internal/fttrace.h +++ b/include/freetype/internal/fttrace.h @@ -42,6 +42,7 @@ FT_TRACE_DEF( synth ) /* bold/slant synthesizer (ftsynth.c) */ FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */ /* SFNT driver components */ +FT_TRACE_DEF( sfdriver ) /* SFNT font driver (sfdriver.c) */ FT_TRACE_DEF( sfobjs ) /* SFNT object handler (sfobjs.c) */ FT_TRACE_DEF( ttcmap ) /* charmap handler (ttcmap.c) */ FT_TRACE_DEF( ttkern ) /* kerning handler (ttkern.c) */ diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c index 5429fde41..8d7d5e5f2 100644 --- a/src/sfnt/sfdriver.c +++ b/src/sfnt/sfdriver.c @@ -49,6 +49,15 @@ #include FT_SERVICE_SFNT_H #include FT_SERVICE_TT_CMAP_H + /*************************************************************************/ + /* */ + /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ + /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ + /* messages during execution. */ + /* */ +#undef FT_COMPONENT +#define FT_COMPONENT trace_sfdriver + /* * SFNT TABLE SERVICE @@ -157,11 +166,19 @@ sfnt_get_name_index( TT_Face face, FT_String* glyph_name ) { - FT_Face root = &face->root; - FT_Long i; + FT_Face root = &face->root; + FT_UInt i, max_gid = FT_UINT_MAX; + + if ( root->num_glyphs < 0 ) + return 0; + else if ( ( FT_ULong ) root->num_glyphs < FT_UINT_MAX ) + max_gid = ( FT_UInt ) root->num_glyphs; + else + FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n", + FT_UINT_MAX, root->num_glyphs )); - for ( i = 0; i < root->num_glyphs; i++ ) + for ( i = 0; i < max_gid; i++ ) { FT_String* gname; FT_Error error = tt_face_get_ps_name( face, i, &gname ); @@ -171,7 +188,7 @@ continue; if ( !ft_strcmp( glyph_name, gname ) ) - return (FT_UInt)i; + return i; } return 0; |