diff options
author | Werner Lemberg <wl@gnu.org> | 2016-09-09 22:11:07 +0200 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2016-09-09 22:11:07 +0200 |
commit | d609b7c1582a9714bbad831fc5f955bccca436a4 (patch) | |
tree | e1161ad639f7527984a427529f60b40919b2c7db /src/sfnt/ttsbit.c | |
parent | d2d5968aed5bc264c885c54d0a50e5355808ab78 (diff) | |
download | freetype2-d609b7c1582a9714bbad831fc5f955bccca436a4.tar.gz |
[sfnt] Don't provide (completely) broken strike data.
FreeType tries to sanitize strike header data; we now reject
completely broken ones.
* include/freetype/internal/tttypes.h (TT_FaceRec): New
`sbit_strike_map' array pointer.
* src/base/ftobjs.c (FT_Match_Size): Reject matches where either
width or height would be zero.
Add tracing message in case of error.
* src/sfnt/sfobjs.c (sfnt_load_face): Populate `sbit_strike_map',
only using (more or less) valid strike header data for
FT_Face's `available_sizes' array.
(sfnt_done_face): Updated.
* src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Use
`sbit_strike_map'.
(tt_face_load_strike_metrics): Improve tracing.
* src/truetype/ttdriver.c (tt_size_select): Use `sbit_strike_map'.
Diffstat (limited to 'src/sfnt/ttsbit.c')
-rw-r--r-- | src/sfnt/ttsbit.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c index 36c261dcc..b4902be69 100644 --- a/src/sfnt/ttsbit.c +++ b/src/sfnt/ttsbit.c @@ -251,7 +251,14 @@ FT_Size_Request req, FT_ULong* astrike_index ) { - return FT_Match_Size( (FT_Face)face, req, 0, astrike_index ); + FT_Error error; + + + error = FT_Match_Size( (FT_Face)face, req, 0, astrike_index ); + if ( !error ) + *astrike_index = face->sbit_strike_map[*astrike_index]; + + return error; } @@ -305,7 +312,8 @@ FT_TRACE2(( "tt_face_load_strike_metrics:" " sanitizing invalid ascender and descender\n" " " - " values for strike (%d, %d)\n", + " values for strike %d (%dppem, %dppem)\n", + strike_index, metrics->x_ppem, metrics->y_ppem )); /* sanitize buggy ascender and descender values */ |