[subset] Limit the number of scripts and langsys' that should be checked when collecting features.

This commit is contained in:
Garret Rieger 2018-10-30 11:29:58 -07:00 committed by Behdad Esfahbod
parent a7aba99baa
commit 0e1ad5a075
2 changed files with 18 additions and 1 deletions

View File

@ -51,6 +51,14 @@
#define HB_CLOSURE_MAX_STAGES 32
#endif
#ifndef HB_MAX_SCRIPTS
#define HB_MAX_SCRIPTS 500
#endif
#ifndef HB_MAX_LANGSYS
#define HB_MAX_LANGSYS 2000
#endif
namespace OT {

View File

@ -668,7 +668,8 @@ struct hb_collect_features_context_t
hb_tag_t table_tag,
hb_set_t *feature_indexes_)
: g (get_gsubgpos_table (face, table_tag)),
feature_indexes (feature_indexes_) {}
feature_indexes (feature_indexes_),
langsys_count(0), script_count(0) {}
bool inline visited (const OT::Script &s)
{
@ -678,6 +679,9 @@ struct hb_collect_features_context_t
!s.get_lang_sys_count ()))
return true;
if (script_count++ > HB_MAX_SCRIPTS)
return true;
return visited (s, visited_script);
}
bool inline visited (const OT::LangSys &l)
@ -688,6 +692,9 @@ struct hb_collect_features_context_t
!l.get_feature_count ()))
return true;
if (langsys_count++ > HB_MAX_LANGSYS)
return true;
return visited (l, visited_langsys);
}
@ -710,6 +717,8 @@ struct hb_collect_features_context_t
private:
hb_set_t visited_script;
hb_set_t visited_langsys;
unsigned int script_count;
unsigned int langsys_count;
};
static void