[GSUB] Protect against mismatching Extension subtable types

This commit is contained in:
Behdad Esfahbod 2009-05-18 06:00:12 -04:00
parent 969afd706e
commit 8533bb985e
1 changed files with 6 additions and 3 deletions

View File

@ -679,10 +679,13 @@ struct SubstLookup : Lookup {
unsigned int type = get_type (); unsigned int type = get_type ();
if (HB_UNLIKELY (type == GSUB_Extension)) { if (HB_UNLIKELY (type == GSUB_Extension)) {
/* Return lookup type of first extension subtable. unsigned int count = get_subtable_count ();
* The spec says all of them should have the same type.
* XXX check for that in sanitize() */
type = get_subtable(0).u.extension->get_type (); type = get_subtable(0).u.extension->get_type ();
/* The spec says all subtables should have the same type.
* This is specially important if one has a reverse type! */
for (unsigned int i = 1; i < count; i++)
if (get_subtable(i).u.extension->get_type () != type)
return 0;
} }
return type; return type;