Delete default assignment operator Offset<>
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 15 Apr 2019 20:00:20 +0000 (16:00 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 15 Apr 2019 20:00:20 +0000 (16:00 -0400)
src/hb-open-type.hh
src/hb-ot-cmap-table.hh
src/hb-ot-layout-common.hh

index 05b8c72..b43bd40 100644 (file)
@@ -173,6 +173,9 @@ typedef Index NameID;
 template <typename Type, bool has_null=true>
 struct Offset : Type
 {
+  HB_DELETE_COPY_ASSIGN (Offset);
+  Offset () = default;
+
   Offset& operator = (typename Type::type i) { Type::operator= (i); return *this; }
 
   typedef Type type;
index 08f186e..0a7d1ef 100644 (file)
@@ -904,7 +904,7 @@ struct cmap
     // Write out format 4 sub table
     {
       CmapSubtable &subtable = format4_plat0_rec.subtable.serialize (&c, table);
-      format4_plat3_rec.subtable = format4_plat0_rec.subtable;
+      format4_plat3_rec.subtable = (unsigned int) format4_plat0_rec.subtable;
       subtable.u.format = 4;
 
       CmapSubtableFormat4 &format4 = subtable.u.format4;
index 8882efd..b85d122 100644 (file)
@@ -583,25 +583,25 @@ struct Feature
      * Adobe tools, only the 'size' feature had FeatureParams defined.
      */
 
-    OffsetTo<FeatureParams> orig_offset = featureParams;
+    if (likely (featureParams.is_null ()))
+      return_trace (true);
+
+    unsigned int orig_offset = featureParams;
     if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
       return_trace (false);
 
-    if (likely (orig_offset.is_null ()))
-      return_trace (true);
-
     if (featureParams == 0 && closure &&
        closure->tag == HB_TAG ('s','i','z','e') &&
        closure->list_base && closure->list_base < this)
     {
-      unsigned int new_offset_int = (unsigned int) orig_offset -
+      unsigned int new_offset_int = orig_offset -
                                    (((char *) this) - ((char *) closure->list_base));
 
       OffsetTo<FeatureParams> new_offset;
-      /* Check that it did not overflow. */
+      /* Check that it would not overflow. */
       new_offset = new_offset_int;
       if (new_offset == new_offset_int &&
-         c->try_set (&featureParams, new_offset) &&
+         c->try_set (&featureParams, new_offset_int) &&
          !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
        return_trace (false);
     }