Make string-array return hb_string_t
diff --git a/src/hb-string-array.hh b/src/hb-string-array.hh
index afad5d7..285b4b5 100644
--- a/src/hb-string-array.hh
+++ b/src/hb-string-array.hh
@@ -40,6 +40,10 @@
 
 static const union HB_STRING_ARRAY_TYPE_NAME {
   struct {
+/* I like to avoid storing the nul-termination byte since we don't need it,
+ * but C++ does not allow that.
+ * https://stackoverflow.com/questions/28433862/why-initializer-string-for-array-of-chars-is-too-long-compiles-fine-in-c-not
+ */
 #define _S(s) char HB_PASTE (str, __LINE__)[sizeof (s)];
 #include HB_STRING_ARRAY_LIST
 #undef _S
@@ -59,12 +63,15 @@
 #define _S(s) offsetof (union HB_STRING_ARRAY_TYPE_NAME, st.HB_PASTE(str, __LINE__)),
 #include HB_STRING_ARRAY_LIST
 #undef _S
+  sizeof (HB_STRING_ARRAY_TYPE_NAME)
 };
 
-static inline const char *
+static inline hb_string_t
 HB_STRING_ARRAY_NAME (unsigned int i)
 {
-  return HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i];
+  assert (i < ARRAY_LENGTH (HB_STRING_ARRAY_OFFS_NAME) - 1);
+  return hb_string_t (HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i],
+		      HB_STRING_ARRAY_OFFS_NAME[i + 1] - HB_STRING_ARRAY_OFFS_NAME[i] - 1);
 }
 
 #undef HB_STRING_ARRAY_TYPE_NAME