[HarfBuzz] harfbuzz: Branch 'master'

Behdad Esfahbod behdad at kemper.freedesktop.org
Sat Nov 10 21:02:15 UTC 2018


 src/hb-dsalgs.hh |   13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

New commits:
commit 8bb97d2ce140b7fe81d0726c32e024d887e0be1c
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Nov 10 15:54:33 2018 -0500

    Revert back hb_bytes_t.cmp() to the scheme it was
    
    But fix UBSan complaint.
    
    There's nothing in hb_bytes_t that guarantees lexical ordering, and
    ordering by length first is much faster.

diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh
index 511b2299..ce134260 100644
--- a/src/hb-dsalgs.hh
+++ b/src/hb-dsalgs.hh
@@ -530,14 +530,13 @@ struct hb_bytes_t
 
   inline int cmp (const hb_bytes_t &a) const
   {
-    unsigned int l = MIN(a.len, len);
-    if (l) /* glibc's memcmp() args are declared nonnull.  Meh. */
-    {
-      int r = memcmp (a.arrayZ, arrayZ, l);
-      if (r) return r;
-    }
+    if (len != a.len)
+      return (int) a.len - (int) len;
+
+    if (!len)
+      return 0; /* glibc's memcmp() declares args non-NULL, and UBSan doesn't like that. :( */
 
-    return a.len < len ? -1 : a.len > len ? +1 : 0;
+    return memcmp (a.arrayZ, arrayZ, len);
   }
   static inline int cmp (const void *pa, const void *pb)
   {


More information about the HarfBuzz mailing list