[truetype] Improve handling of buggy embedded bitmap strikes. We are now able to successfully load `AppleMyoungJo.ttf'. Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>. * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Don't trust glyph format.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
diff --git a/ChangeLog b/ChangeLog
index d58c429..6f1db9f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2013-11-21 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improve handling of buggy embedded bitmap strikes.
+
+ We are now able to successfully load `AppleMyoungJo.ttf'.
+ Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Don't trust glyph
+ format.
+
2013-11-20 Werner Lemberg <wl@gnu.org>
[truetype] Don't trust `maxp's `maxSizeOfInstructions'.
diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c
index 8258f79..1ec5aef 100644
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -969,7 +969,22 @@
case 2:
case 5:
case 7:
- loader = tt_sbit_decoder_load_bit_aligned;
+ {
+ /* Don't trust `glyph_format'. For example, Apple's main Korean */
+ /* system font, `AppleMyungJo.ttf' (version 7.0d2e6), uses glyph */
+ /* format 7, but the data is format 6. We check whether we have */
+ /* an excessive number of bytes in the image: If it is equal to */
+ /* the value for a byte-aligned glyph, use the other loading */
+ /* routine. */
+ FT_UInt width = decoder->metrics->width;
+ FT_UInt height= decoder->metrics->width;
+
+
+ if ( height * ( ( width + 7 ) >> 3 ) == (FT_UInt)( p_limit - p ) )
+ loader = tt_sbit_decoder_load_byte_aligned;
+ else
+ loader = tt_sbit_decoder_load_bit_aligned;
+ }
break;
case 8: