summaryrefslogtreecommitdiff
path: root/src/sfnt/ttsbit.c
diff options
context:
space:
mode:
authorWerner Lemberg <wl@gnu.org>2016-09-09 22:11:07 +0200
committerWerner Lemberg <wl@gnu.org>2016-09-09 22:11:07 +0200
commitd609b7c1582a9714bbad831fc5f955bccca436a4 (patch)
treee1161ad639f7527984a427529f60b40919b2c7db /src/sfnt/ttsbit.c
parentd2d5968aed5bc264c885c54d0a50e5355808ab78 (diff)
downloadfreetype2-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.c12
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 */