[HB] Sanitize DeviceTable
diff --git a/src/hb-ot-layout-common-private.hh b/src/hb-ot-layout-common-private.hh index 9aebc9f..c4fb1a9 100644 --- a/src/hb-ot-layout-common-private.hh +++ b/src/hb-ot-layout-common-private.hh
@@ -357,7 +357,7 @@ } } - inline bool sanitize (SANITIZE_ARG_DEF) { + bool sanitize (SANITIZE_ARG_DEF) { if (!SANITIZE (u.format)) return false; switch (u.format) { case 1: return u.format1->sanitize (SANITIZE_ARG); @@ -469,7 +469,7 @@ } } - inline bool sanitize (SANITIZE_ARG_DEF) { + bool sanitize (SANITIZE_ARG_DEF) { if (!SANITIZE (u.format)) return false; switch (u.format) { case 1: return u.format1->sanitize (SANITIZE_ARG); @@ -494,6 +494,8 @@ struct Device { + inline int operator() (unsigned int ppem_size) const { return get_delta (ppem_size); } + int get_delta (unsigned int ppem_size) const { unsigned int f = deltaFormat; @@ -517,7 +519,16 @@ return delta; } - inline int operator() (unsigned int ppem_size) const { return get_delta (ppem_size); } + inline unsigned int get_size () const + { + unsigned int f = deltaFormat; + if (HB_UNLIKELY (f < 1 || f > 3 || startSize > endSize)) return sizeof (*this); + return sizeof (*this) + ((endSize - startSize + (1 << (4 - f)) - 1) >> (4 - f)); + } + + bool sanitize (SANITIZE_ARG_DEF) { + return SANITIZE_GET_SIZE (); + } private: USHORT startSize; /* Smallest size to correct--in ppem */