src/hb-null.hh | 2 +- src/hb-open-type.hh | 19 +++++++++++++++++-- src/hb-ot-glyf-table.hh | 8 ++++++-- 3 files changed, 24 insertions(+), 5 deletions(-)
New commits: commit e866910579e9cdc5b1ffa2e401fd0c056d44ca6a Author: Behdad Esfahbod <beh...@behdad.org> Date: Thu Nov 22 18:07:59 2018 -0500 Enforce requiring null_size even if min_size is 0 This concludes null-size enforcement changes diff --git a/src/hb-null.hh b/src/hb-null.hh index b87775b6..58151d72 100644 --- a/src/hb-null.hh +++ b/src/hb-null.hh @@ -50,7 +50,7 @@ template <typename T, typename B> struct _hb_null_size { enum { value = sizeof (T) }; }; template <typename T> -struct _hb_null_size<T, _hb_bool_type<(bool) (int) T::min_size> > +struct _hb_null_size<T, _hb_bool_type<(bool) (1 + (unsigned int) T::min_size)> > { enum { value = T::null_size }; }; template <typename T> commit 4d4fd64ff47da04a7008d410c92e8fb4ad970781 Author: Behdad Esfahbod <beh...@behdad.org> Date: Thu Nov 22 18:07:36 2018 -0500 Allow non-nullable OffsetTo<> to non-Null'able objects diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index 0ecd3c6b..f4a9a5e8 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh @@ -231,17 +231,31 @@ struct FixedVersion * Use: (base+offset) */ +template <typename Type, bool has_null> +struct _hb_has_null +{ + static inline const Type *get_null (void) { return nullptr; } + static inline Type *get_crap (void) { return nullptr; } +}; +template <typename Type> +struct _hb_has_null<Type, true> +{ + static inline const Type *get_null (void) { return &Null(Type); } + static inline Type *get_crap (void) { return &Crap(Type); } +}; + template <typename Type, typename OffsetType=HBUINT16, bool has_null=true> struct OffsetTo : Offset<OffsetType, has_null> { inline const Type& operator () (const void *base) const { - if (unlikely (this->is_null ())) return Null (Type); + if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null (); return StructAtOffset<const Type> (base, *this); } inline Type& operator () (void *base) const { if (unlikely (this->is_null ())) return Crap (Type); + if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_crap (); return StructAtOffset<Type> (base, *this); } commit fa9f585ec53bc7145d3bed1a4bd756d64dae1e55 Author: Behdad Esfahbod <beh...@behdad.org> Date: Thu Nov 22 17:56:51 2018 -0500 [glyf] Don't mark structs UNBOUNDED See comments. diff --git a/src/hb-ot-glyf-table.hh b/src/hb-ot-glyf-table.hh index a3ef1ad0..c88f4338 100644 --- a/src/hb-ot-glyf-table.hh +++ b/src/hb-ot-glyf-table.hh @@ -56,7 +56,9 @@ struct loca protected: UnsizedArrayOf<HBUINT8> dataZ; /* Location data. */ public: - DEFINE_SIZE_UNBOUNDED (0); + DEFINE_SIZE_MIN (0); /* In reality, this is UNBOUNDED() type; but since we always + * check the size externally, allow Null() object of it by + * defining it MIN() instead. */ }; @@ -465,7 +467,9 @@ struct glyf protected: UnsizedArrayOf<HBUINT8> dataZ; /* Glyphs data. */ public: - DEFINE_SIZE_UNBOUNDED (0); + DEFINE_SIZE_MIN (0); /* In reality, this is UNBOUNDED() type; but since we always + * check the size externally, allow Null() object of it by + * defining it MIN() instead. */ }; struct glyf_accelerator_t : glyf::accelerator_t {}; commit f47a60a7543dbaf41086c25a1a22ae518d8b92a9 Author: Behdad Esfahbod <beh...@behdad.org> Date: Thu Nov 22 17:53:29 2018 -0500 Mark UnsizedArrayOf<> as UNBOUNDED Since min_size is 0, Null() still accepts this type. diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index 41169664..0ecd3c6b 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh @@ -317,6 +317,7 @@ struct OffsetTo : Offset<OffsetType, has_null> DEFINE_SIZE_STATIC (sizeof (OffsetType)); }; template <typename Type, bool has_null=true> struct LOffsetTo : OffsetTo<Type, HBUINT32, has_null> {}; + template <typename Base, typename OffsetType, bool has_null, typename Type> static inline const Type& operator + (const Base &base, const OffsetTo<Type, OffsetType, has_null> &offset) { return offset (base); } template <typename Base, typename OffsetType, bool has_null, typename Type> @@ -401,7 +402,7 @@ struct UnsizedArrayOf public: Type arrayZ[VAR]; public: - DEFINE_SIZE_ARRAY (0, arrayZ); + DEFINE_SIZE_UNBOUNDED (0); }; /* Unsized array of offset's */ _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz