shithub: freetype+ttf2subf

Download patch

ref: bd75a517dcf87b620e8dd7fcd07992b881f0e234
parent: e5f4469359560913da8a87cf4831e3e5dee30f93
author: Werner Lemberg <[email protected]>
date: Sat Aug 8 04:39:45 EDT 2015

[type42] Fix glyph access.

This is a severe bug: We've missed one level of indirection, as
described in the Type 42 specification.  As a result, ftview
sometimes showed incorrect glyphs for given glyph names, and even
displayed `error 0x0006' (invalid argument!) in case the number of
glyph indices differed between the Type 42 font and the embedded
TTF.

Apparently, noone ever noticed it; this shows how much Type 42 fonts
are in use...

* src/type42/t42objs.c (T42_GlyphSlot_Load): Map Type 42 glyph index
to embedded TTF's glyph index.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2015-08-08  Werner Lemberg  <[email protected]>
 
+	[type42] Fix glyph access.
+
+	This is a severe bug: We've missed one level of indirection, as
+	described in the Type 42 specification.  As a result, ftview
+	sometimes showed incorrect glyphs for given glyph names, and even
+	displayed `error 0x0006' (invalid argument!) in case the number of
+	glyph indices differed between the Type 42 font and the embedded
+	TTF.
+
+	Apparently, noone ever noticed it; this shows how much Type 42 fonts
+	are in use...
+
+	* src/type42/t42objs.c (T42_GlyphSlot_Load): Map Type 42 glyph index
+	to embedded TTF's glyph index.
+
+2015-08-08  Werner Lemberg  <[email protected]>
+
 	[type42] Minor clean-up.
 
 	* src/type42/t42parse.c (t42_parse_font_matrix): Remove unused
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -8,7 +8,11 @@
       you are  using CFFs; otherwise  you get cropped glyphs  with GUI
       interfaces like GTK or Qt.
 
+    - Accessing Type 42 fonts returned  incorrect results if the glyph
+      order of the embedded TrueType font differs from the glyph order
+      of the Type 42 charstrings table.
 
+
   II. IMPORTANT CHANGES
 
     - The header  file layout  has been  changed (again),  moving  all
@@ -28,6 +32,15 @@
         ...
 
       don't need any change to the source code.
+
+
+  III. MISCELLANEOUS
+
+    - The auto-hinter's Arabic script support has been enhanced.
+
+    - The TrueType bytecode interpreter now runs slightly faster.
+
+    - Improved support for builds with cmake.
 
 
 ======================================================================
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -652,10 +652,15 @@
     FT_Error         error;
     T42_GlyphSlot    t42slot = (T42_GlyphSlot)glyph;
     T42_Size         t42size = (T42_Size)size;
+    T42_Face         t42face = (T42_Face)size->face;
     FT_Driver_Class  ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
 
 
     FT_TRACE1(( "T42_GlyphSlot_Load: glyph index %d\n", glyph_index ));
+
+    /* map T42 glyph index to embedded TTF's glyph index */
+    glyph_index = (FT_UInt)ft_atol(
+                    (const char *)t42face->type1.charstrings[glyph_index] );
 
     t42_glyphslot_clear( t42slot->ttslot );
     error = ttclazz->load_glyph( t42slot->ttslot,