[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).
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
diff --git a/ChangeLog b/ChangeLog
index e976629..901bac5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2015-10-01 Werner Lemberg <wl@gnu.org>
+ [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 <wl@gnu.org>
+
* src/autofit/afranges.c (af_deva_nonbase_uniranges): Fix ranges.
They should be a subset of `af_deva_uniranges'.
diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c
index 3e8ea83..c4d9abd 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;
}