[HB] Add check to avoid infinite recursion
This commit is contained in:
parent
887c4b4416
commit
6cf2a52593
|
@ -646,7 +646,7 @@ struct SubstLookup : Lookup {
|
||||||
if (HB_UNLIKELY (type == GSUB_Extension)) {
|
if (HB_UNLIKELY (type == GSUB_Extension)) {
|
||||||
/* Return lookup type of first extension subtable.
|
/* Return lookup type of first extension subtable.
|
||||||
* The spec says all of them should have the same type.
|
* 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 ();
|
type = get_subtable(0).u.extension->get_type ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -763,10 +763,14 @@ ASSERT_SIZE (GSUB, 10);
|
||||||
/* Out-of-class implementation for methods recursing */
|
/* Out-of-class implementation for methods recursing */
|
||||||
|
|
||||||
inline bool ExtensionSubstFormat1::substitute (LOOKUP_ARGS_DEF) const {
|
inline bool ExtensionSubstFormat1::substitute (LOOKUP_ARGS_DEF) const {
|
||||||
/* XXX either check in sanitize or here that the lookuptype is not 7 again,
|
unsigned int lookup_type = get_type ();
|
||||||
* or we can loop indefinitely. */
|
|
||||||
|
/* TODO: belongs to sanitize() */
|
||||||
|
if (HB_UNLIKELY (lookup_type == GSUB_ReverseChainSingle))
|
||||||
|
return false;
|
||||||
|
|
||||||
return (*(SubstLookupSubTable *)(((char *) this) + get_offset ())).substitute (LOOKUP_ARGS,
|
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) {
|
static inline bool substitute_lookup (LOOKUP_ARGS_DEF, unsigned int lookup_index) {
|
||||||
|
|
Loading…
Reference in New Issue