[HarfBuzz] harfbuzz: Branch 'master'

Behdad Esfahbod behdad at kemper.freedesktop.org
Mon Feb 26 08:32:29 UTC 2018


 src/hb-aat-layout-trak-table.hh |   67 +++++++++-------------------------------
 1 file changed, 16 insertions(+), 51 deletions(-)

New commits:
commit fa3a69e2334ec4122d672670614a8e5a95611d75
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Feb 26 00:32:11 2018 -0800

    [aat/trak] Simplify sanitize()

diff --git a/src/hb-aat-layout-trak-table.hh b/src/hb-aat-layout-trak-table.hh
index 6c83760e..5767b116 100644
--- a/src/hb-aat-layout-trak-table.hh
+++ b/src/hb-aat-layout-trak-table.hh
@@ -42,15 +42,15 @@ struct TrackTableEntry
   inline bool sanitize (hb_sanitize_context_t *c, const void *base, unsigned int size) const
   {
     TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) && ((base+values).sanitize (c, size)));
+    return_trace (c->check_struct (this) && (values.sanitize (c, base, size)));
   }
 
-  inline Fixed get_track_value () const
+  inline float get_track_value () const
   {
-    return track;
+    return track.to_float ();
   }
 
-  inline float get_value (const void *base, unsigned int index) const
+  inline int get_value (const void *base, unsigned int index) const
   {
     return (base+values)[index];
   }
@@ -58,7 +58,7 @@ struct TrackTableEntry
   protected:
   Fixed			track;		/* Track value for this record. */
   HBUINT16		trackNameID;	/* The 'name' table index for this track */
-  OffsetTo<UnsizedArrayOf<HBINT16> >
+  OffsetTo<UnsizedArrayOf<FWORD> >
 			values;		/* Offset from start of tracking table to
 					 * per-size tracking values for this track. */
 
@@ -71,26 +71,9 @@ struct TrackData
   inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
     TRACE_SANITIZE (this);
-    if (!(c->check_struct (this)))
-      return_trace (false);
-
-    unsigned int tracks = nTracks;
-    unsigned int sizes = nSizes;
-
-    // It should have at least one track
-    if (tracks < 1) return_trace (false);
-
-    // We can not do interpolation with less than two
-    if (sizes < 2) return_trace (false);
-
-    if (!((base+sizeTable).sanitize (c, sizes)))
-      return_trace (false);
-
-    for (unsigned int i = 0; i < tracks; ++i)
-      if (!(trackTable[i].sanitize (c, base, sizes)))
-        return_trace (false);
-
-    return_trace (true);
+    return_trace (c->check_struct (this) &&
+		  sizeTable.sanitize (c, base, nSizes) &&
+		  trackTable.sanitize (c, nTracks, base, nSizes));
   }
 
   inline float get_tracking (const void *base, float ptem) const
@@ -104,15 +87,14 @@ struct TrackData
     Fixed fixed_size;
     fixed_size.set_float (csspx);
 
-    /* TODO Clean this up. */
+    /* XXX Clean this up. Make it work with nSizes==1 and 0. */
 
-    unsigned int tracks = nTracks;
     unsigned int sizes = nSizes;
 
     const TrackTableEntry *trackTableEntry = nullptr;
     for (unsigned int i = 0; i < sizes; ++i)
       // For now we only seek for track entries with zero tracking value
-      if (trackTable[i].get_track_value () == 0)
+      if (trackTable[i].get_track_value () == 0.)
         trackTableEntry = &trackTable[0];
 
     // We couldn't match any, exit
@@ -142,9 +124,10 @@ struct TrackData
   protected:
   HBUINT16		nTracks;	/* Number of separate tracks included in this table. */
   HBUINT16		nSizes;		/* Number of point sizes included in this table. */
-  LOffsetTo<UnsizedArrayOf<Fixed> >
+  LOffsetTo<UnsizedArrayOf<Fixed> >	/* Offset to array[nSizes] of size values. */
 			sizeTable;
-  UnsizedArrayOf<TrackTableEntry>	trackTable;/* Array[nSizes] of size values. */
+  UnsizedArrayOf<TrackTableEntry>
+			trackTable;	/* Array[nTracks] of TrackTableEntry records. */
 
   public:
   DEFINE_SIZE_ARRAY (8, trackTable);
@@ -158,27 +141,9 @@ struct trak
   {
     TRACE_SANITIZE (this);
 
-    if (!(c->check_struct (this)))
-      return_trace (false);
-
-    if ((format != 0) || (reserved != 0))
-      return_trace (false);
-
-    if (horizData)
-    {
-      const TrackData &trackData = this+horizData;
-      if (!trackData.sanitize (c, this))
-        return_trace (false);
-    }
-
-    if (vertData)
-    {
-      const TrackData &trackData = this+horizData;
-      if (!trackData.sanitize (c, this))
-        return_trace (false);
-    }
-
-    return_trace (true);
+    return_trace (c->check_struct (this) &&
+		  horizData.sanitize (c, this, this) &&
+		  vertData.sanitize (c, this, this));
   }
 
   inline bool apply (hb_aat_apply_context_t *c) const


More information about the HarfBuzz mailing list