[repacker] when calculating 16bit space size also consider ext lookup subtables.
diff --git a/src/hb-repacker.hh b/src/hb-repacker.hh
index d222458..bbc35f5 100644
--- a/src/hb-repacker.hh
+++ b/src/hb-repacker.hh
@@ -93,11 +93,26 @@
size_t accumlated_bytes =
ext_context.graph.vertices_[ext_context.lookup_list_index].table_size ();
+ // For the size of 16bit space, first add the size of all ext lookup subtables (as if all lookups
+ // were extensions).
for (auto p : lookup_sizes)
{
unsigned lookup_index = p.first;
+ accumlated_bytes += ext_context.lookups.get(lookup_index)->number_of_subtables () * 8;
+ }
+
+ for (auto p : lookup_sizes)
+ {
+ unsigned lookup_index = p.first;
+ const graph::Lookup* lookup = ext_context.lookups.get(lookup_index);
+ if (lookup->is_extension (ext_context.table_tag))
+ // already extension, size is counted by the loop above.
+ continue;
+
size_t size = p.second;
accumlated_bytes += size;
+ // will not be an extension lookup so subtract size counted in the above loop.
+ accumlated_bytes -= lookup->number_of_subtables () * 8;
if (accumlated_bytes < (1 << 16)) continue; // this lookup fits with 64k, which won't overflow.