shithub: freetype+ttf2subf

Download patch

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.

git/fs: mount .git/fs: mount/attach disallowed
--- 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;
     }