[repacker] ensure lookup map is updated when lookup memory location changes.
diff --git a/src/graph/graph.hh b/src/graph/graph.hh index b0b6df7..a73d86f 100644 --- a/src/graph/graph.hh +++ b/src/graph/graph.hh
@@ -291,12 +291,12 @@ check_success (!queue.in_error ()); check_success (!sorted_graph.in_error ()); - if (!check_success (new_id == -1)) - print_orphaned_nodes (); remap_all_obj_indices (id_map, &sorted_graph); - hb_swap (vertices_, sorted_graph); + + if (!check_success (new_id == -1)) + print_orphaned_nodes (); } /*
diff --git a/src/graph/gsubgpos-graph.hh b/src/graph/gsubgpos-graph.hh index de7cc49..937e058 100644 --- a/src/graph/gsubgpos-graph.hh +++ b/src/graph/gsubgpos-graph.hh
@@ -142,7 +142,8 @@ + new_sub_tables.iter() | hb_sink (all_new_subtables); } - add_sub_tables (c, this_index, type, all_new_subtables); + if (all_new_subtables) + add_sub_tables (c, this_index, type, all_new_subtables); return true; } @@ -150,7 +151,7 @@ void add_sub_tables (gsubgpos_graph_context_t& c, unsigned this_index, unsigned type, - hb_vector_t<unsigned> subtable_indices) + hb_vector_t<unsigned>& subtable_indices) { bool is_ext = is_extension (c.table_tag); auto& v = c.graph.vertices_[this_index]; @@ -184,6 +185,10 @@ (char*) new_lookup; c.graph.vertices_[subtable_id].parents.push (this_index); } + + // The head location of the lookup has changed, invalidating the lookups map entry + // in the context. Update the map. + c.lookups.set (this_index, new_lookup); } unsigned create_extension_subtable (gsubgpos_graph_context_t& c,