[OT] Really fix possible NULL dereference this time

This commit is contained in:
Behdad Esfahbod 2012-09-04 14:55:00 -04:00
parent 2941683358
commit a5ddd9e31c
3 changed files with 10 additions and 8 deletions

View File

@ -86,13 +86,13 @@ struct hb_would_apply_context_t
const hb_codepoint_t *glyphs_,
unsigned int len_,
bool zero_context_,
const hb_set_digest_t *digest_
const hb_set_digest_t &digest_
) :
face (face_),
glyphs (glyphs_),
len (len_),
zero_context (zero_context_),
digest (digest_ ? *digest_ : hb_set_digest_t()),
digest (digest_),
debug_depth (0) {};
};
@ -124,7 +124,7 @@ struct hb_apply_context_t
hb_apply_context_t (hb_font_t *font_,
hb_buffer_t *buffer_,
hb_mask_t lookup_mask_,
const hb_set_digest_t *digest_) :
const hb_set_digest_t &digest_) :
font (font_), face (font->face), buffer (buffer_),
direction (buffer_->props.direction),
lookup_mask (lookup_mask_),
@ -132,7 +132,7 @@ struct hb_apply_context_t
lookup_props (0), property (0), debug_depth (0),
gdef (*hb_ot_layout_from_face (face)->gdef),
has_glyph_classes (gdef.has_glyph_classes ()),
digest (*digest_) {}
digest (digest_) {}
void set_lookup_props (unsigned int lookup_props_) {
lookup_props = lookup_props_;

View File

@ -417,7 +417,7 @@ hb_ot_layout_would_substitute_lookup_fast (hb_face_t *face,
hb_bool_t zero_context)
{
if (unlikely (lookup_index >= hb_ot_layout_from_face (face)->gsub_lookup_count)) return false;
OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context, hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
return hb_ot_layout_from_face (face)->gsub->would_substitute_lookup (&c, lookup_index);
}
@ -434,7 +434,7 @@ hb_ot_layout_substitute_lookup (hb_font_t *font,
hb_mask_t mask)
{
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
OT::hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
OT::hb_apply_context_t c (font, buffer, mask, hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
return hb_ot_layout_from_face (font->face)->gsub->substitute_lookup (&c, lookup_index);
}
@ -476,7 +476,7 @@ hb_ot_layout_position_lookup (hb_font_t *font,
hb_mask_t mask)
{
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
OT::hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
OT::hb_apply_context_t c (font, buffer, mask, hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
return hb_ot_layout_from_face (font->face)->gpos->position_lookup (&c, lookup_index);
}

View File

@ -246,7 +246,9 @@ arabic_fallback_shape (hb_font_t *font, hb_buffer_t *buffer)
buffer->info[i].codepoint = shaped;
}
OT::hb_apply_context_t c (font, buffer, 1/*global mask*/, NULL);
hb_set_digest_t digest;
digest.init ();
OT::hb_apply_context_t c (font, buffer, 1/*global mask*/, digest);
c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
/* Mandatory ligatures */