[HarfBuzz] harfbuzz: Branch 'master'
Behdad Esfahbod
behdad at kemper.freedesktop.org
Sat Jun 30 04:49:50 UTC 2018
src/hb-ot-shape-complex-khmer.cc | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
New commits:
commit 7b8dfac560abe89d48cfc2f6efb4a61820bd28bf
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Sat Jun 30 09:16:54 2018 +0430
[khmer] Fix infinite-loop in cluster merging
Indic shaper already had this check. We removed it when forking
Khmer shaper by mistake.
Fixes https://bugzilla.mozilla.org/show_bug.cgi?id=1464623
diff --git a/src/hb-ot-shape-complex-khmer.cc b/src/hb-ot-shape-complex-khmer.cc
index 18e3c941..7876d366 100644
--- a/src/hb-ot-shape-complex-khmer.cc
+++ b/src/hb-ot-shape-complex-khmer.cc
@@ -372,22 +372,25 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
break;
}
- /* Note! syllable() is a one-byte field. */
- for (unsigned int i = base; i < end; i++)
- if (info[i].syllable() != 255)
- {
- unsigned int max = i;
- unsigned int j = start + info[i].syllable();
- while (j != i)
+ if (unlikely (end - start >= 127))
+ buffer->merge_clusters (start, end);
+ else
+ /* Note! syllable() is a one-byte field. */
+ for (unsigned int i = base; i < end; i++)
+ if (info[i].syllable() != 255)
{
- max = MAX (max, j);
- unsigned int next = start + info[j].syllable();
- info[j].syllable() = 255; /* So we don't process j later again. */
- j = next;
+ unsigned int max = i;
+ unsigned int j = start + info[i].syllable();
+ while (j != i)
+ {
+ max = MAX (max, j);
+ unsigned int next = start + info[j].syllable();
+ info[j].syllable() = 255; /* So we don't process j later again. */
+ j = next;
+ }
+ if (i != max)
+ buffer->merge_clusters (i, max + 1);
}
- if (i != max)
- buffer->merge_clusters (i, max + 1);
- }
/* Put syllable back in. */
for (unsigned int i = start; i < end; i++)
More information about the HarfBuzz
mailing list