From d1db57c284c9139fc520354c79af6a59bebc556b Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 24 Dec 2016 09:05:16 +0100 Subject: [PATCH] * src/sfnt/ttsbit.c (tt_face_load_sbit): Allow more version values. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some fonts seem to have the `version' field in the wrong byte order. Problem reported by 張俊芝 <418092625@qq.com>. --- ChangeLog | 8 ++++++++ src/sfnt/ttsbit.c | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index c126f7f7e..775201abc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2016-12-24 Werner Lemberg + + * src/sfnt/ttsbit.c (tt_face_load_sbit): Allow more version values. + + Some fonts seem to have the `version' field in the wrong byte order. + + Problem reported by 張俊芝 <418092625@qq.com>. + 2016-12-24 Werner Lemberg * src/truetype/ttpload.c (tt_face_load_loca): Sanitize table length. diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c index bc51304b6..bf6ecca5a 100644 --- a/src/sfnt/ttsbit.c +++ b/src/sfnt/ttsbit.c @@ -107,8 +107,12 @@ version = FT_NEXT_LONG( p ); num_strikes = FT_NEXT_ULONG( p ); + /* there's at least one font (FZShuSong-Z01, version 3) */ + /* that uses the wrong byte order for the `version' field */ if ( ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00020000UL && - ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00030000UL ) + ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000200UL && + ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00030000UL && + ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000300UL ) { error = FT_THROW( Unknown_File_Format ); goto Exit;