[truetype] Fix loading of composite glyphs.
* src/truetype/ttgload.c (TT_Load_Composite_Glyph): If the ARGS_ARE_XY_VALUES flag is not set, handle argument values as unsigned. I trust `ttx' (which has exactly such code) that it does the right thing here... The reason that noone has ever noticed this bug is probably the fact that point-aligned subglyphs are rare, as are subglyphs with a number of points in the range [128;255], which is quite large (or even in the range [32768;65535], which is extremely unlikely).
This commit is contained in:
parent
a87fb8ccf3
commit
0a6b6ff7c6
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2015-05-17 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[truetype] Fix loading of composite glyphs.
|
||||
|
||||
* src/truetype/ttgload.c (TT_Load_Composite_Glyph): If the
|
||||
ARGS_ARE_XY_VALUES flag is not set, handle argument values as
|
||||
unsigned. I trust `ttx' (which has exactly such code) that it does
|
||||
the right thing here...
|
||||
|
||||
The reason that noone has ever noticed this bug is probably the fact
|
||||
that point-aligned subglyphs are rare, as are subglyphs with a
|
||||
number of points in the range [128;255], which is quite large (or
|
||||
even in the range [32768;65535], which is extremely unlikely).
|
||||
|
||||
2015-05-12 Chris Liddell <chris.liddell@artifex.com>
|
||||
|
||||
[cff] Make the `*curveto' operators more tolerant.
|
||||
|
@ -621,15 +621,31 @@
|
||||
goto Invalid_Composite;
|
||||
|
||||
/* read arguments */
|
||||
if ( subglyph->flags & ARGS_ARE_WORDS )
|
||||
if ( subglyph->flags & ARGS_ARE_XY_VALUES )
|
||||
{
|
||||
subglyph->arg1 = FT_NEXT_SHORT( p );
|
||||
subglyph->arg2 = FT_NEXT_SHORT( p );
|
||||
if ( subglyph->flags & ARGS_ARE_WORDS )
|
||||
{
|
||||
subglyph->arg1 = FT_NEXT_SHORT( p );
|
||||
subglyph->arg2 = FT_NEXT_SHORT( p );
|
||||
}
|
||||
else
|
||||
{
|
||||
subglyph->arg1 = FT_NEXT_CHAR( p );
|
||||
subglyph->arg2 = FT_NEXT_CHAR( p );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
subglyph->arg1 = FT_NEXT_CHAR( p );
|
||||
subglyph->arg2 = FT_NEXT_CHAR( p );
|
||||
if ( subglyph->flags & ARGS_ARE_WORDS )
|
||||
{
|
||||
subglyph->arg1 = (FT_Int)FT_NEXT_USHORT( p );
|
||||
subglyph->arg2 = (FT_Int)FT_NEXT_USHORT( p );
|
||||
}
|
||||
else
|
||||
{
|
||||
subglyph->arg1 = (FT_Int)FT_NEXT_BYTE( p );
|
||||
subglyph->arg2 = (FT_Int)FT_NEXT_BYTE( p );
|
||||
}
|
||||
}
|
||||
|
||||
/* read transform */
|
||||
|
Loading…
Reference in New Issue
Block a user