diff options
author | Adrian Johnson <ajohnson@redneon.com> | 2016-07-17 21:33:12 +0930 |
---|---|---|
committer | Bryce Harrington <bryce@osg.samsung.com> | 2017-06-15 14:54:46 -0700 |
commit | d48dd8575d4f49008d6b2c8057ec9f50e4e4f1e2 (patch) | |
tree | 73dfb1499b8b132360854f66dd09bbc3bf84bc68 | |
parent | 0b4eda23b0d7d4487352a82405b302f028feb11f (diff) |
truetype: reverse cmap search should end when 0xffff- 0xffff range reached
-rw-r--r-- | src/cairo-truetype-subset.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/cairo-truetype-subset.c b/src/cairo-truetype-subset.c index 9137ef3aa..e3449a0d1 100644 --- a/src/cairo-truetype-subset.c +++ b/src/cairo-truetype-subset.c @@ -1310,11 +1310,14 @@ _cairo_truetype_reverse_cmap (cairo_scaled_font_t *scaled_font, /* search for glyph in segments with rangeOffset=0 */ for (i = 0; i < num_segments; i++) { + uint16_t start = be16_to_cpu (start_code[i]); + uint16_t end = be16_to_cpu (end_code[i]); + + if (start == 0xffff && end == 0xffff) + break; + c = index - be16_to_cpu (delta[i]); - if (range_offset[i] == 0 && - c >= be16_to_cpu (start_code[i]) && - c <= be16_to_cpu (end_code[i])) - { + if (range_offset[i] == 0 && c >= start && c <= end) { *ucs4 = c; goto found; } @@ -1322,9 +1325,15 @@ _cairo_truetype_reverse_cmap (cairo_scaled_font_t *scaled_font, /* search for glyph in segments with rangeOffset=1 */ for (i = 0; i < num_segments; i++) { + uint16_t start = be16_to_cpu (start_code[i]); + uint16_t end = be16_to_cpu (end_code[i]); + + if (start == 0xffff && end == 0xffff) + break; + if (range_offset[i] != 0) { uint16_t *glyph_ids = &range_offset[i] + be16_to_cpu (range_offset[i])/2; - int range_size = be16_to_cpu (end_code[i]) - be16_to_cpu (start_code[i]) + 1; + int range_size = end - start + 1; uint16_t g_id_be = cpu_to_be16 (index); int j; @@ -1334,7 +1343,7 @@ _cairo_truetype_reverse_cmap (cairo_scaled_font_t *scaled_font, for (j = 0; j < range_size; j++) { if (glyph_ids[j] == g_id_be) { - *ucs4 = be16_to_cpu (start_code[i]) + j; + *ucs4 = start + j; goto found; } } |