[serialize] Handle non-nullable offsets

This commit is contained in:
Behdad Esfahbod 2019-04-02 17:21:54 -07:00
parent e04518bafc
commit e42b82c828
1 changed files with 9 additions and 4 deletions

View File

@ -281,19 +281,24 @@ struct OffsetTo : Offset<OffsetType, has_null>
} }
template <typename T> template <typename T>
void serialize_subset (hb_subset_context_t *c, const T &src, const void *base) bool serialize_subset (hb_subset_context_t *c, const T &src, const void *base)
{ {
*this = 0; *this = 0;
if (&src == &Null (T)) if (has_null && &src == &Null (T))
return; return false;
c->serializer->push (); c->serializer->push ();
if (src.subset (c))
bool ret = src.subset (c);
if (ret || !has_null)
c->serializer->add_link (*this, c->serializer->add_link (*this,
c->serializer->pop_pack (), c->serializer->pop_pack (),
base); base);
else else
c->serializer->pop_discard (); c->serializer->pop_discard ();
return ret;
} }
bool sanitize_shallow (hb_sanitize_context_t *c, const void *base) const bool sanitize_shallow (hb_sanitize_context_t *c, const void *base) const