summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Johnson <ajohnson@redneon.com>2016-07-17 21:33:12 +0930
committerBryce Harrington <bryce@osg.samsung.com>2017-06-15 14:54:46 -0700
commitd48dd8575d4f49008d6b2c8057ec9f50e4e4f1e2 (patch)
tree73dfb1499b8b132360854f66dd09bbc3bf84bc68
parent0b4eda23b0d7d4487352a82405b302f028feb11f (diff)
truetype: reverse cmap search should end when 0xffff- 0xffff range reached
-rw-r--r--src/cairo-truetype-subset.c21
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;
}
}