src/hb-ot-shape-complex-khmer.cc |   31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

New commits:
commit 7b8dfac560abe89d48cfc2f6efb4a61820bd28bf
Author: Behdad Esfahbod <[email protected]>
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++)
_______________________________________________
HarfBuzz mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to