diff --git a/src/hb-font.cc b/src/hb-font.cc index b8b151b08..20aeb16a9 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -297,7 +297,7 @@ _hb_face_for_data_get_table (hb_tag_t tag, void *user_data) { hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data; - const OpenTypeFontFile &ot_file = *CastP (hb_blob_lock (data->blob)); + const OpenTypeFontFile &ot_file = *Sanitizer::lock_instance (data->blob); const OpenTypeFontFace &ot_face = ot_file.get_face (data->index); const OpenTypeTable &table = ot_face.get_table_by_tag (tag); diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh index 023df8391..8c3e8a46a 100644 --- a/src/hb-open-type-private.hh +++ b/src/hb-open-type-private.hh @@ -330,6 +330,11 @@ struct Sanitizer return hb_blob_create_empty (); } } + + static const Type* lock_instance (hb_blob_t *blob) { + const char *base = hb_blob_lock (blob); + return unlikely (!base) ? &Null(Type) : CastP (base); + } }; diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 04cc982ed..91f9fe97e 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -47,13 +47,13 @@ _hb_ot_layout_init (hb_face_t *face) memset (layout, 0, sizeof (*layout)); layout->gdef_blob = Sanitizer::sanitize (hb_face_get_table (face, HB_OT_TAG_GDEF)); - layout->gdef = CastP (hb_blob_lock (layout->gdef_blob)); + layout->gdef = Sanitizer::lock_instance (layout->gdef_blob); layout->gsub_blob = Sanitizer::sanitize (hb_face_get_table (face, HB_OT_TAG_GSUB)); - layout->gsub = CastP (hb_blob_lock (layout->gsub_blob)); + layout->gsub = Sanitizer::lock_instance (layout->gsub_blob); layout->gpos_blob = Sanitizer::sanitize (hb_face_get_table (face, HB_OT_TAG_GPOS)); - layout->gpos = CastP (hb_blob_lock (layout->gpos_blob)); + layout->gpos = Sanitizer::lock_instance (layout->gpos_blob); } void