diff options
author | Ewald Hew <ewaldhew@gmail.com> | 2018-01-07 16:38:54 +0800 |
---|---|---|
committer | Ewald Hew <ewaldhew@gmail.com> | 2018-01-07 16:38:54 +0800 |
commit | 21bd9c2f8ce57b20204ef505e9a64f55350edec0 (patch) | |
tree | f36a6a4623cf5820c134ba1f602ba765401f0c35 | |
parent | 3758aed7605aff97d6156937efde8ec51919caab (diff) | |
download | freetype-21bd9c2f8ce57b20204ef505e9a64f55350edec0.tar.gz |
[psaux] Fix Type 1 glyphs with too many stem hints.
According to the CFF specification, charstrings can have up to 96 stem
hints. Due to hint replacement routines in Type 1 charstrings, some
glyphs are rejected by the Adobe engine, which implements the above
limit. This fix turns off hinting for such glyphs.
* src/psaux/pshints.c (cf2_hintmap_build): Reset the error from calling
`cf2_hintmask_setAll' on a problematic Type 1 charstring and turn off
hinting.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | src/psaux/pshints.c | 8 |
2 files changed, 21 insertions, 0 deletions
@@ -1,3 +1,16 @@ +2018-01-07 Ewald Hew <ewaldhew@gmail.com> + + [psaux] Fix Type 1 glyphs with too many stem hints. + + According to the CFF specification, charstrings can have up to 96 stem + hints. Due to hint replacement routines in Type 1 charstrings, some + glyphs are rejected by the Adobe engine, which implements the above + limit. This fix turns off hinting for such glyphs. + + * src/psaux/pshints.c (cf2_hintmap_build): Reset the error from calling + `cf2_hintmask_setAll' on a problematic Type 1 charstring and turn off + hinting. + 2018-01-06 Werner Lemberg <wl@gnu.org> Add `FT_Done_MM_Var'. diff --git a/src/psaux/pshints.c b/src/psaux/pshints.c index 94f18c731..361519642 100644 --- a/src/psaux/pshints.c +++ b/src/psaux/pshints.c @@ -842,7 +842,15 @@ cf2_arrstack_size( hStemHintArray ) + cf2_arrstack_size( vStemHintArray ) ); if ( !cf2_hintmask_isValid( hintMask ) ) + { + if ( font->isT1 ) + { + /* no error, just continue unhinted */ + *hintMask->error = FT_Err_Ok; + hintmap->hinted = FALSE; + } return; /* too many stem hints */ + } } /* begin by clearing the map */ |