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;
}