From ac0c1663fa6e93a5a94c88fc7497bc11ca17f0a1 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 1 Oct 2010 19:09:23 -0400 Subject: [PATCH] Avoid div-by-zero, validate upem --- src/hb-ot-head-private.hh | 7 +++++++ src/hb-ot-layout-private.hh | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-head-private.hh b/src/hb-ot-head-private.hh index a3e87a9..56a5861 100644 --- a/src/hb-ot-head-private.hh +++ b/src/hb-ot-head-private.hh @@ -42,12 +42,19 @@ struct head { static const hb_tag_t Tag = HB_OT_TAG_head; + inline unsigned int get_upem (void) const { + unsigned int upem = unitsPerEm; + /* If no valid head table found, assume 1000, which matches typicaly Type1 usage. */ + return 16 <= upem && upem <= 16384 ? upem : 1000; + } + inline bool sanitize (hb_sanitize_context_t *c) { TRACE_SANITIZE (); /* Shall we check for magicNumber here? Who cares? */ return c->check_struct (this) && likely (version.major == 1); } + private: FixedVersion version; /* Version of the head table--currently * 0x00010000 for version 1.0. */ FixedVersion fontRevision; /* Set by font manufacturer. */ diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh index 8e041ba..c1ae99f 100644 --- a/src/hb-ot-layout-private.hh +++ b/src/hb-ot-layout-private.hh @@ -77,9 +77,9 @@ struct hb_ot_layout_context_t } info; /* Convert from font-space to user-space */ - /* XXX div-by-zero / speed up */ - inline hb_position_t scale_x (int16_t v) { return (int64_t) this->font->x_scale * v / this->face->head_table->unitsPerEm; } - inline hb_position_t scale_y (int16_t v) { return (int64_t) this->font->y_scale * v / this->face->head_table->unitsPerEm; } + /* XXX speed up */ + inline hb_position_t scale_x (int16_t v) { return (int64_t) this->font->x_scale * v / this->face->head_table->get_upem (); } + inline hb_position_t scale_y (int16_t v) { return (int64_t) this->font->y_scale * v / this->face->head_table->get_upem (); } }; -- 2.7.4