sfnt: Ignore invalid GIDs in glyph name lookup.
This commit is contained in:
parent
eec405540d
commit
61adbe980a
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2009-07-31 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-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||
|
||||
pcf: Fix a comparison between FT_Long and FT_ULong.
|
||||
|
|
|
@ -43,6 +43,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) */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
for ( i = 0; i < root->num_glyphs; i++ )
|
||||
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 < 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;
|
||||
|
|
Loading…
Reference in New Issue