提交 82484b05 编写于 作者: J Jonathan Kew 提交者: Behdad Esfahbod

[hb-set] Don't shrink vectors until after processing their contents.

Fixes #1054.
上级 eb585033
...@@ -424,7 +424,7 @@ struct hb_set_t ...@@ -424,7 +424,7 @@ struct hb_set_t
unsigned int nb = other->pages.len; unsigned int nb = other->pages.len;
unsigned int next_page = na; unsigned int next_page = na;
unsigned int count = 0; unsigned int count = 0, newCount = 0;
unsigned int a = 0, b = 0; unsigned int a = 0, b = 0;
for (; a < na && b < nb; ) for (; a < na && b < nb; )
{ {
...@@ -452,8 +452,10 @@ struct hb_set_t ...@@ -452,8 +452,10 @@ struct hb_set_t
if (Op::passthru_right) if (Op::passthru_right)
count += nb - b; count += nb - b;
if (!resize (count)) if (count > pages.len)
return; if (!resize (count))
return;
newCount = count;
/* Process in-place backward. */ /* Process in-place backward. */
a = na; a = na;
...@@ -506,6 +508,8 @@ struct hb_set_t ...@@ -506,6 +508,8 @@ struct hb_set_t
page_at (count).v = other->page_at (b).v; page_at (count).v = other->page_at (b).v;
} }
assert (!count); assert (!count);
if (pages.len > newCount)
resize (newCount);
} }
inline void union_ (const hb_set_t *other) inline void union_ (const hb_set_t *other)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册