[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.
This commit is contained in:
Werner Lemberg 2015-08-08 08:39:45 +02:00
parent e5f4469359
commit bd75a517dc
3 changed files with 35 additions and 0 deletions

View File

@ -1,3 +1,20 @@
2015-08-08 Werner Lemberg <wl@gnu.org>
[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 <wl@gnu.org> 2015-08-08 Werner Lemberg <wl@gnu.org>
[type42] Minor clean-up. [type42] Minor clean-up.

View File

@ -8,6 +8,10 @@ CHANGES BETWEEN 2.6 and 2.6.1
you are using CFFs; otherwise you get cropped glyphs with GUI you are using CFFs; otherwise you get cropped glyphs with GUI
interfaces like GTK or Qt. 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 II. IMPORTANT CHANGES
@ -30,6 +34,15 @@ CHANGES BETWEEN 2.6 and 2.6.1
don't need any change to the source code. 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.
====================================================================== ======================================================================
CHANGES BETWEEN 2.5.5 and 2.6 CHANGES BETWEEN 2.5.5 and 2.6

View File

@ -652,11 +652,16 @@
FT_Error error; FT_Error error;
T42_GlyphSlot t42slot = (T42_GlyphSlot)glyph; T42_GlyphSlot t42slot = (T42_GlyphSlot)glyph;
T42_Size t42size = (T42_Size)size; T42_Size t42size = (T42_Size)size;
T42_Face t42face = (T42_Face)size->face;
FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz; FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
FT_TRACE1(( "T42_GlyphSlot_Load: glyph index %d\n", glyph_index )); 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 ); t42_glyphslot_clear( t42slot->ttslot );
error = ttclazz->load_glyph( t42slot->ttslot, error = ttclazz->load_glyph( t42slot->ttslot,
t42size->ttsize, t42size->ttsize,