[HarfBuzz] harfbuzz: Branch 'master' - 2 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Sat Oct 27 05:05:39 UTC 2018
src/hb-aat-layout-morx-table.hh | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
New commits:
commit 6aa019c4af6b64bb732205e6051f3e73e1b70721
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Oct 26 22:02:17 2018 -0700
[morx] Fix merge_cluster to end at last ligature component
Don't assume current position was a component in the ligature.
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index 5b21358e..a5620910 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -443,6 +443,7 @@ struct LigatureSubtable
DEBUG_MSG (APPLY, nullptr, "Produced ligature %d", lig);
buffer->replace_glyph (lig);
+ unsigned int lig_end = match_positions[match_length - 1] + 1;
/* Now go and delete all subsequent components. */
while (match_length - 1 > cursor)
{
@@ -451,7 +452,7 @@ struct LigatureSubtable
buffer->replace_glyph (DELETED_GLYPH);
}
- buffer->move_to (end + 1);
+ buffer->move_to (lig_end);
buffer->merge_out_clusters (match_positions[cursor], buffer->out_len);
}
commit 00ae4be6bf8b1d0800043167c5cf95187ac12515
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Oct 26 21:59:20 2018 -0700
[morx] Fix bailing out ligation at end-of-text
Check was after a move_to, which wouldn't work.
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11147
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index 22a99443..5b21358e 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -399,6 +399,9 @@ struct LigatureSubtable
if (unlikely (!match_length))
return true;
+ if (buffer->idx >= buffer->len)
+ return false; // TODO Work on previous instead?
+
unsigned int cursor = match_length;
do
{
@@ -421,8 +424,6 @@ struct LigatureSubtable
if (uoffset & 0x20000000)
uoffset |= 0xC0000000; /* Sign-extend. */
int32_t offset = (int32_t) uoffset;
- if (buffer->idx >= buffer->len)
- return false; // TODO Work on previous instead?
unsigned int component_idx = buffer->cur().codepoint + offset;
const HBUINT16 &componentData = component[component_idx];
More information about the HarfBuzz
mailing list