[HB] Add check to avoid infinite recursion

This commit is contained in:
Behdad Esfahbod 2009-05-17 21:11:49 -04:00
parent 887c4b4416
commit 6cf2a52593

View File

@ -646,7 +646,7 @@ struct SubstLookup : Lookup {
if (HB_UNLIKELY (type == GSUB_Extension)) {
/* Return lookup type of first extension subtable.
* The spec says all of them should have the same type.
* XXX check for that somehow */
* XXX check for that in sanitize() */
type = get_subtable(0).u.extension->get_type ();
}
@ -763,10 +763,14 @@ ASSERT_SIZE (GSUB, 10);
/* Out-of-class implementation for methods recursing */
inline bool ExtensionSubstFormat1::substitute (LOOKUP_ARGS_DEF) const {
/* XXX either check in sanitize or here that the lookuptype is not 7 again,
* or we can loop indefinitely. */
unsigned int lookup_type = get_type ();
/* TODO: belongs to sanitize() */
if (HB_UNLIKELY (lookup_type == GSUB_ReverseChainSingle))
return false;
return (*(SubstLookupSubTable *)(((char *) this) + get_offset ())).substitute (LOOKUP_ARGS,
get_type ());
lookup_type);
}
static inline bool substitute_lookup (LOOKUP_ARGS_DEF, unsigned int lookup_index) {