From 2415cbf3655073070dda5329d4d0f05645bd5896 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 26 Feb 2010 23:48:53 +0100 Subject: [PATCH] Improve handling of invalid glyph indices in char->index functions. * src/base/ftobjs.c (FT_Get_First_Char, FT_Get_Next_Char): Use a loop. --- ChangeLog | 7 +++++++ src/base/ftobjs.c | 15 ++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc8157781..ec3a0d7a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-02-26 Behdad Esfahbod + + Improve handling of invalid glyph indices in char->index functions. + + * src/base/ftobjs.c (FT_Get_First_Char, FT_Get_Next_Char): Use a + loop. + 2010-02-18 Chris Liddell Fix Savannah bug #28905. diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 46bcd3bb8..54c7fb30c 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -3095,7 +3095,7 @@ } result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode ); } - return result; + return result; } @@ -3112,11 +3112,13 @@ if ( face && face->charmap ) { gindex = FT_Get_Char_Index( face, 0 ); - if ( gindex == 0 ) - result = FT_Get_Next_Char( face, 0, &gindex ); + if ( gindex == 0 || gindex >= (FT_UInt)face->num_glyphs ) + do { + result = FT_Get_Next_Char( face, 0, &gindex ); + } while ( gindex >= (FT_UInt)face->num_glyphs ); } - if ( agindex ) + if ( agindex ) *agindex = gindex; return result; @@ -3140,7 +3142,10 @@ FT_CMap cmap = FT_CMAP( face->charmap ); - gindex = cmap->clazz->char_next( cmap, &code ); + do { + gindex = cmap->clazz->char_next( cmap, &code ); + } while ( gindex >= (FT_UInt)face->num_glyphs ); + result = ( gindex == 0 ) ? 0 : code; }