From 90e437e3cdf0710b5c9b6197b95a58d594312626 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Thu, 1 Oct 2015 20:00:27 +0200 Subject: [PATCH] [sfnt] Make `tt_cmap4_char_map_linear' more robust (#46078). * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Take care of border conditions (i.e., if the loop exits naturally). --- ChangeLog | 7 +++++++ src/sfnt/ttcmap.c | 10 ++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e976629a7..901bac5b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-10-01 Werner Lemberg + + [sfnt] Make `tt_cmap4_char_map_linear' more robust (#46078). + + * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Take care of + border conditions (i.e., if the loop exits naturally). + 2015-10-01 Werner Lemberg * src/autofit/afranges.c (af_deva_nonbase_uniranges): Fix ranges. diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c index 3e8ea8374..c4d9abdfe 100644 --- a/src/sfnt/ttcmap.c +++ b/src/sfnt/ttcmap.c @@ -1130,18 +1130,16 @@ /* we have an invalid glyph index; if there is an overflow, */ /* we can adjust `charcode', otherwise the whole segment is */ /* invalid */ + gindex = 0; + if ( (FT_Int)charcode + delta < 0 && (FT_Int)end + delta >= 0 ) - { charcode = (FT_UInt)( -delta ); - gindex = 0; - } + else if ( (FT_Int)charcode + delta < 0x10000L && (FT_Int)end + delta >= 0x10000L ) - { charcode = (FT_UInt)( 0x10000L - delta ); - gindex = 0; - } + else continue; }