From 831daf4c76aed87d229b1edfb59a0a37caa8e581 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Tue, 1 Oct 2019 17:46:27 -0700 Subject: [PATCH] Enforce HB_MAX_LANGSYS limit during layout subsetting. --- src/hb-ot-layout-common.hh | 68 +++++++++++------- ...inimized-hb-subset-fuzzer-5721073428987904 | Bin 0 -> 349561 bytes 2 files changed, 41 insertions(+), 27 deletions(-) create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5721073428987904 diff --git a/src/hb-ot-layout-common.hh b/src/hb-ot-layout-common.hh index 956806da3..7896485c6 100644 --- a/src/hb-ot-layout-common.hh +++ b/src/hb-ot-layout-common.hh @@ -137,7 +137,25 @@ struct Record_sanitize_closure_t { const void *list_base; }; -struct RecordList_subset_context_t; +struct RecordList_subset_context_t { + + RecordList_subset_context_t() : script_count (0), langsys_count (0) + {} + + bool visitScript () + { + return script_count++ < HB_MAX_SCRIPTS; + } + + bool visitLangSys () + { + return langsys_count++ < HB_MAX_LANGSYS; + } + + private: + unsigned int script_count; + unsigned int langsys_count; +}; template struct Record @@ -277,26 +295,6 @@ struct Script; struct LangSys; struct Feature; -struct RecordList_subset_context_t { - - RecordList_subset_context_t() : script_count (0), langsys_count (0) - {} - - bool visited (const Script& s) - { - return script_count++ > HB_MAX_SCRIPTS; - } - - bool visited (const LangSys& l) - { - return langsys_count++ > HB_MAX_LANGSYS; - } - - private: - unsigned int script_count; - unsigned int langsys_count; -}; - struct LangSys { unsigned int get_feature_count () const @@ -366,14 +364,30 @@ struct Script bool subset (hb_subset_context_t *c, RecordList_subset_context_t *record_list_context) const { TRACE_SUBSET (this); - if (record_list_context->visited (*this)) return_trace (false); + if (!record_list_context->visitScript ()) return_trace (false); + + auto *out = c->serializer->start_embed (*this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); - auto *out = c->serializer->embed (*this); - if (unlikely (!out)) return_trace (false); out->defaultLangSys.serialize_copy (c->serializer, defaultLangSys, this, out); - unsigned int count = langSys.len; - for (unsigned int i = 0; i < count; i++) - out->langSys.arrayZ[i].offset.serialize_copy (c->serializer, langSys[i].offset, this, out); + + for (const auto &src: langSys) + { + if (!record_list_context->visitLangSys ()) { + continue; + } + + auto snap = c->serializer->snapshot (); + auto *lang_sys = c->serializer->embed (src); + + if (likely(lang_sys) + && lang_sys->offset.serialize_copy (c->serializer, src.offset, this, out)) + { + out->langSys.len++; + continue; + } + c->serializer->revert (snap); + } return_trace (true); } diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5721073428987904 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5721073428987904 new file mode 100644 index 0000000000000000000000000000000000000000..683ef99f7eb474ccbc3807ce7849cef5ed75f801 GIT binary patch literal 349561 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