[OTLayout] Make hb_ot_layout_get_size_params() do some checks
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 11 Dec 2012 19:30:57 +0000 (14:30 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 11 Dec 2012 19:30:57 +0000 (14:30 -0500)
src/hb-ot-layout.cc

index cf485bd..61ba31a 100644 (file)
@@ -647,6 +647,7 @@ hb_ot_layout_get_size_params (hb_face_t    *face,
                              unsigned int *range_start,       /* OUT.  May be NULL */
                              unsigned int *range_end          /* OUT.  May be NULL */)
 {
+  bool ret = false;
   const OT::GPOS &gpos = _get_gpos (face);
 
   unsigned int num_features = gpos.get_feature_count ();
@@ -658,7 +659,14 @@ hb_ot_layout_get_size_params (hb_face_t    *face,
       const OT::FeatureParamsSize &params = f.get_feature_params ().u.size;
 
 #define PARAM(a, A) if (a) *a = params.A
+      if (!params.designSize)
+        goto zero_all;
       PARAM (design_size, designSize);
+      if (!params.subfamilyID)
+      {
+        ret = true;
+       goto zero_most;
+      };
       PARAM (subfamily_id, subfamilyID);
       PARAM (subfamily_name_id, subfamilyNameID);
       PARAM (range_start, rangeStart);
@@ -670,12 +678,14 @@ hb_ot_layout_get_size_params (hb_face_t    *face,
   }
 
 #define PARAM(a, A) if (a) *a = 0
+zero_all:
   PARAM (design_size, designSize);
+zero_most:
   PARAM (subfamily_id, subfamilyID);
   PARAM (subfamily_name_id, subfamilyNameID);
   PARAM (range_start, rangeStart);
   PARAM (range_end, rangeEnd);
 #undef PARAM
 
-  return false;
+  return ret;
 }