From: Behdad Esfahbod Date: Fri, 1 Oct 2010 23:09:23 +0000 (-0400) Subject: Avoid div-by-zero, validate upem X-Git-Tag: submit/2.0alpha-wayland/20121130.004132~9^2~542 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ac0c1663fa6e93a5a94c88fc7497bc11ca17f0a1;p=profile%2Fivi%2Forg.tizen.video-player.git Avoid div-by-zero, validate upem --- 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 (); } };