shithub: freetype+ttf2subf

Download patch

ref: 6cb2faa845f3841f2b5281b42e22e5a450cd9fd9
parent: 31093ccecd9015f238a089688ffeaf5c15192bc6
author: Suzuki, Toshiya (鈴木俊哉) <[email protected]>
date: Thu Feb 21 13:46:07 EST 2008

* src/base/ftmac.c: Fix a bug of PostScript font name synthesis in parse_fond().

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2008-02-21  suzuki toshiya  <[email protected]>
 
+	* src/base/ftmac.c: Fix a bug of PostScript font name synthesis
+	in parse_fond(). For any face of a specified FOND, always the
+	name for the first face was used. Except of a FOND that refers
+	multiple Type1 font files, wrong synthesized font names are not
+	used at all, so this is invisible bug. A few limit checks are
+	added to parse_fond().
+
+	* builds/mac/ftmac.c: Ditto.
+
+2008-02-21  suzuki toshiya  <[email protected]>
+
 	* builds/unix/configure.raw: Split compiler option to link Carbon
 	frameworks to one option for CoreServices framework and another
 	option for ApplicationServices framework.  The split options can be
--- a/builds/mac/ftmac.c
+++ b/builds/mac/ftmac.c
@@ -727,6 +727,10 @@
     assoc      = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
     base_assoc = assoc;
 
+    /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */
+    if ( 47 < face_index )
+      return;
+
     /* Let's do a little range checking before we get too excited here */
     if ( face_index < count_faces_sfnt( fond_data ) )
     {
@@ -778,9 +782,10 @@
           ft_memcpy(ps_name, names[0] + 1, ps_name_len);
           ps_name[ps_name_len] = 0;
         }
-        if ( style->indexes[0] > 1 )
+        if ( style->indexes[face_index] > 1 &&
+             style->indexes[face_index] <= FT_MIN( string_count, 64 ) )
         {
-          unsigned char*  suffixes = names[style->indexes[0] - 1];
+          unsigned char*  suffixes = names[style->indexes[face_index] - 1];
 
 
           for ( i = 1; i <= suffixes[0]; i++ )
--- a/src/base/ftmac.c
+++ b/src/base/ftmac.c
@@ -395,6 +395,10 @@
     assoc      = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
     base_assoc = assoc;
 
+    /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */
+    if ( 47 < face_index )
+      return;
+
     /* Let's do a little range checking before we get too excited here */
     if ( face_index < count_faces_sfnt( fond_data ) )
     {
@@ -446,9 +450,10 @@
           ft_memcpy(ps_name, names[0] + 1, ps_name_len);
           ps_name[ps_name_len] = 0;
         }
-        if ( style->indexes[0] > 1 )
+        if ( style->indexes[face_index] > 1 &&
+             style->indexes[face_index] <= FT_MIN( string_count, 64 ) )
         {
-          unsigned char*  suffixes = names[style->indexes[0] - 1];
+          unsigned char*  suffixes = names[style->indexes[face_index] - 1];
 
 
           for ( i = 1; i <= suffixes[0]; i++ )