Revert "Make sure we make progress in OOM situations"

This reverts commit 68b507a3c3.

Commit abadc1717d provides a better
fix for this.
This commit is contained in:
Behdad Esfahbod 2015-11-19 11:50:58 -08:00
parent e1118aeac3
commit 18e1c6b6ef
2 changed files with 13 additions and 25 deletions

View File

@ -175,12 +175,15 @@ struct hb_buffer_t {
{ {
if (unlikely (out_info != info || out_len != idx)) { if (unlikely (out_info != info || out_len != idx)) {
if (unlikely (!make_room_for (1, 1))) if (unlikely (!make_room_for (1, 1)))
goto done; {
idx++; // So we don't hang indefinitely...
return;
}
out_info[out_len] = info[idx]; out_info[out_len] = info[idx];
} }
out_len++; out_len++;
} }
done:
idx++; idx++;
} }

View File

@ -324,9 +324,7 @@ hb_buffer_t::replace_glyphs (unsigned int num_in,
unsigned int num_out, unsigned int num_out,
const uint32_t *glyph_data) const uint32_t *glyph_data)
{ {
if (unlikely (!make_room_for (num_in, num_out))) if (unlikely (!make_room_for (num_in, num_out))) return;
goto done;
{
merge_clusters (idx, idx + num_in); merge_clusters (idx, idx + num_in);
@ -339,50 +337,39 @@ hb_buffer_t::replace_glyphs (unsigned int num_in,
pinfo++; pinfo++;
} }
out_len += num_out;
}
done:
idx += num_in; idx += num_in;
out_len += num_out;
} }
void void
hb_buffer_t::output_glyph (hb_codepoint_t glyph_index) hb_buffer_t::output_glyph (hb_codepoint_t glyph_index)
{ {
if (unlikely (!make_room_for (0, 1))) if (unlikely (!make_room_for (0, 1))) return;
goto done;
out_info[out_len] = info[idx]; out_info[out_len] = info[idx];
out_info[out_len].codepoint = glyph_index; out_info[out_len].codepoint = glyph_index;
out_len++; out_len++;
done:
;
} }
void void
hb_buffer_t::output_info (const hb_glyph_info_t &glyph_info) hb_buffer_t::output_info (const hb_glyph_info_t &glyph_info)
{ {
if (unlikely (!make_room_for (0, 1))) if (unlikely (!make_room_for (0, 1))) return;
goto done;
out_info[out_len] = glyph_info; out_info[out_len] = glyph_info;
out_len++; out_len++;
done:
;
} }
void void
hb_buffer_t::copy_glyph (void) hb_buffer_t::copy_glyph (void)
{ {
if (unlikely (!make_room_for (0, 1))) if (unlikely (!make_room_for (0, 1))) return;
goto done;
out_info[out_len] = info[idx]; out_info[out_len] = info[idx];
out_len++; out_len++;
done:
;
} }
bool bool
@ -400,7 +387,7 @@ hb_buffer_t::move_to (unsigned int i)
if (out_len < i) if (out_len < i)
{ {
unsigned int count = i - out_len; unsigned int count = i - out_len;
if (unlikely (!make_room_for (count, count))) return false; // XXX verify bailout if (unlikely (!make_room_for (count, count))) return false;
memmove (out_info + out_len, info + idx, count * sizeof (out_info[0])); memmove (out_info + out_len, info + idx, count * sizeof (out_info[0]));
idx += count; idx += count;
@ -427,15 +414,13 @@ void
hb_buffer_t::replace_glyph (hb_codepoint_t glyph_index) hb_buffer_t::replace_glyph (hb_codepoint_t glyph_index)
{ {
if (unlikely (out_info != info || out_len != idx)) { if (unlikely (out_info != info || out_len != idx)) {
if (unlikely (!make_room_for (1, 1))) if (unlikely (!make_room_for (1, 1))) return;
goto out;
out_info[out_len] = info[idx]; out_info[out_len] = info[idx];
} }
out_info[out_len].codepoint = glyph_index; out_info[out_len].codepoint = glyph_index;
out_len++;
out:
idx++; idx++;
out_len++;
} }