Minor fraction mask setting improvement
diff --git a/src/hb-ot-map-private.hh b/src/hb-ot-map-private.hh
index 1b4f029..0e718a6 100644
--- a/src/hb-ot-map-private.hh
+++ b/src/hb-ot-map-private.hh
@@ -88,8 +88,6 @@
     return map ? map->needs_fallback : false;
   }
 
-  /* XXX get_1_mask is actually unsafe if feature has more than
-   * one bit. */
   inline hb_mask_t get_1_mask (hb_tag_t feature_tag) const {
     const feature_map_t *map = features.bsearch (&feature_tag);
     return map ? map->_1_mask : 0;
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index f9adfd2..55ddbb5 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -346,9 +346,11 @@
 	     HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
         end++;
 
-      buffer->set_masks (frac_mask, frac_mask, start, end);
-      buffer->set_masks (numr_mask, numr_mask, start, i);
-      buffer->set_masks (dnom_mask, dnom_mask, i + 1, end);
+      for (unsigned int j = start; j < i; j++)
+        info[j].mask |= numr_mask | frac_mask;
+      info[i].mask |= frac_mask;
+      for (unsigned int j = i + 1; j < end; j++)
+        info[j].mask |= frac_mask | dnom_mask;
 
       i = end - 1;
     }