[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 */