diff --git a/src/hb-set-private.hh b/src/hb-set-private.hh index ed753e68af685f9969f2b3f62db1997a61965cd8..ccd4d8df5f74d38780321fc26d9cb7e5647a46d0 100644 --- a/src/hb-set-private.hh +++ b/src/hb-set-private.hh @@ -424,7 +424,7 @@ struct hb_set_t unsigned int nb = other->pages.len; unsigned int next_page = na; - unsigned int count = 0; + unsigned int count = 0, newCount = 0; unsigned int a = 0, b = 0; for (; a < na && b < nb; ) { @@ -452,8 +452,10 @@ struct hb_set_t if (Op::passthru_right) count += nb - b; - if (!resize (count)) - return; + if (count > pages.len) + if (!resize (count)) + return; + newCount = count; /* Process in-place backward. */ a = na; @@ -506,6 +508,8 @@ struct hb_set_t page_at (count).v = other->page_at (b).v; } assert (!count); + if (pages.len > newCount) + resize (newCount); } inline void union_ (const hb_set_t *other)