ref: 2415cbf3655073070dda5329d4d0f05645bd5896
parent: 10cf38879521b7f16e7f0bc83183f32858de05a1
author: Behdad Esfahbod <[email protected]>
date: Fri Feb 26 18:48:53 EST 2010
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.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-02-26 Behdad Esfahbod <[email protected]>
+
+ 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 <[email protected]>
Fix Savannah bug #28905.
--- 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;
}