Improve Subst/Pos SubTable access and sanitize
diff --git a/src/hb-ot-layout-gpos-private.hh b/src/hb-ot-layout-gpos-private.hh index bebde66..1454b5b 100644 --- a/src/hb-ot-layout-gpos-private.hh +++ b/src/hb-ot-layout-gpos-private.hh
@@ -1440,7 +1440,7 @@ struct PosLookup : Lookup { inline const PosLookupSubTable& get_subtable (unsigned int i) const - { return (const PosLookupSubTable&) Lookup::get_subtable (i); } + { return this+CONST_CAST (OffsetArrayOf<PosLookupSubTable>, subTable, 0)[i]; } /* Like get_type(), but looks through extension lookups. * Never returns Extension */ @@ -1519,7 +1519,7 @@ inline bool sanitize (SANITIZE_ARG_DEF) { TRACE_SANITIZE (); if (!Lookup::sanitize (SANITIZE_ARG)) return false; - OffsetArrayOf<PosLookupSubTable> &list = (OffsetArrayOf<PosLookupSubTable> &) subTable; + OffsetArrayOf<PosLookupSubTable> &list = CAST (OffsetArrayOf<PosLookupSubTable>, subTable, 0); return SANITIZE_THIS (list); } };
diff --git a/src/hb-ot-layout-gsub-private.hh b/src/hb-ot-layout-gsub-private.hh index 1a49edb..d04ea99 100644 --- a/src/hb-ot-layout-gsub-private.hh +++ b/src/hb-ot-layout-gsub-private.hh
@@ -736,7 +736,7 @@ struct SubstLookup : Lookup { inline const SubstLookupSubTable& get_subtable (unsigned int i) const - { return CONST_CAST (SubstLookupSubTable, Lookup::get_subtable (i), 0); } + { return this+CONST_CAST (OffsetArrayOf<SubstLookupSubTable>, subTable, 0)[i]; } /* Like get_type(), but looks through extension lookups. * Never returns Extension */ @@ -829,7 +829,7 @@ inline bool sanitize (SANITIZE_ARG_DEF) { TRACE_SANITIZE (); if (!Lookup::sanitize (SANITIZE_ARG)) return false; - OffsetArrayOf<SubstLookupSubTable> &list = (OffsetArrayOf<SubstLookupSubTable> &) subTable; + OffsetArrayOf<SubstLookupSubTable> &list = CAST (OffsetArrayOf<SubstLookupSubTable>, subTable, 0); return SANITIZE_THIS (list); } };