Fix fallout from 975bdd5ef562e37655067b703b2b9ca7481f4985

Ouch!
diff --git a/src/hb-ot-map-private.hh b/src/hb-ot-map-private.hh
index 22f2749..4aaf328 100644
--- a/src/hb-ot-map-private.hh
+++ b/src/hb-ot-map-private.hh
@@ -78,7 +78,26 @@
     pause_func_t pause_func;
   };
 
-  hb_ot_map_t (void) { memset (this, 0, sizeof (*this)); }
+  inline void init (void)
+  {
+    memset (this, 0, sizeof (*this));
+
+    features.init ();
+    for (unsigned int table_index = 0; table_index < 2; table_index++)
+    {
+      lookups[table_index].init ();
+      stages[table_index].init ();
+    }
+  }
+  inline void fini (void)
+  {
+    features.fini ();
+    for (unsigned int table_index = 0; table_index < 2; table_index++)
+    {
+      lookups[table_index].fini ();
+      stages[table_index].fini ();
+    }
+  }
 
   inline hb_mask_t get_global_mask (void) const { return global_mask; }
 
@@ -129,15 +148,6 @@
   HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
   HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
 
-  inline void fini (void) {
-    features.fini ();
-    for (unsigned int table_index = 0; table_index < 2; table_index++)
-    {
-      lookups[table_index].fini ();
-      stages[table_index].fini ();
-    }
-  }
-
   public:
   hb_tag_t chosen_script[2];
   bool found_script[2];
@@ -171,6 +181,8 @@
   HB_INTERNAL hb_ot_map_builder_t (hb_face_t *face_,
 				   const hb_segment_properties_t *props_);
 
+  HB_INTERNAL ~hb_ot_map_builder_t (void);
+
   HB_INTERNAL void add_feature (hb_tag_t tag, unsigned int value,
 				hb_ot_map_feature_flags_t flags);
 
@@ -186,14 +198,6 @@
 			    const int    *coords,
 			    unsigned int  num_coords);
 
-  inline void fini (void) {
-    feature_infos.fini ();
-    for (unsigned int table_index = 0; table_index < 2; table_index++)
-    {
-      stages[table_index].fini ();
-    }
-  }
-
   private:
 
   HB_INTERNAL void add_lookups (hb_ot_map_t  &m,
diff --git a/src/hb-ot-map.cc b/src/hb-ot-map.cc
index 504f094..46bf2db 100644
--- a/src/hb-ot-map.cc
+++ b/src/hb-ot-map.cc
@@ -43,6 +43,10 @@
 {
   memset (this, 0, sizeof (*this));
 
+  feature_infos.init ();
+  for (unsigned int table_index = 0; table_index < 2; table_index++)
+    stages[table_index].init ();
+
   face = face_;
   props = *props_;
 
@@ -63,6 +67,13 @@
   }
 }
 
+hb_ot_map_builder_t::~hb_ot_map_builder_t (void)
+{
+  feature_infos.fini ();
+  for (unsigned int table_index = 0; table_index < 2; table_index++)
+    stages[table_index].fini ();
+}
+
 void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value,
 				       hb_ot_map_feature_flags_t flags)
 {
diff --git a/src/hb-ot-post-table.hh b/src/hb-ot-post-table.hh
index ab3c053..5f42751 100644
--- a/src/hb-ot-post-table.hh
+++ b/src/hb-ot-post-table.hh
@@ -109,12 +109,13 @@
   {
     inline void init (hb_face_t *face)
     {
+      index_to_offset.init ();
+
       blob = Sanitizer<post>().sanitize (face->reference_table (HB_OT_TAG_post));
       const post *table = blob->as<post> ();
       unsigned int table_length = blob->length;
 
       version = table->version.to_int ();
-      index_to_offset.init ();
       if (version != 0x00020000)
         return;
 
diff --git a/src/hb-ot-shape-private.hh b/src/hb-ot-shape-private.hh
index c217af0..d689826 100644
--- a/src/hb-ot-shape-private.hh
+++ b/src/hb-ot-shape-private.hh
@@ -59,7 +59,14 @@
   inline void substitute (hb_font_t *font, hb_buffer_t *buffer) const { map.substitute (this, font, buffer); }
   inline void position (hb_font_t *font, hb_buffer_t *buffer) const { map.position (this, font, buffer); }
 
-  void fini (void) { map.fini (); }
+  void init (void)
+  {
+    memset (this, 0, sizeof (*this));
+    map.init ();
+  }
+  void fini (void) {
+    map.fini ();
+  }
 };
 
 struct hb_ot_shape_planner_t
@@ -75,7 +82,6 @@
 			 props (master_plan->props),
 			 shaper (nullptr),
 			 map (face, &props) {}
-  ~hb_ot_shape_planner_t (void) { map.fini (); }
 
   inline void compile (hb_ot_shape_plan_t &plan,
 		       const int          *coords,
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index cf87b7c..c20b110 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -180,6 +180,8 @@
   if (unlikely (!plan))
     return nullptr;
 
+  plan->init ();
+
   hb_ot_shape_planner_t planner (shape_plan);
 
   planner.shaper = hb_ot_shape_complex_categorize (&planner);
diff --git a/src/hb-subset.cc b/src/hb-subset.cc
index 4d2dc29..6d388e2 100644
--- a/src/hb-subset.cc
+++ b/src/hb-subset.cc
@@ -133,6 +133,8 @@
   if (unlikely (!data))
     return nullptr;
 
+  data->tables.init ();
+
   return data;
 }