Add hb_shape_list_shapers()
diff --git a/src/hb-shape.cc b/src/hb-shape.cc
index 9e4469d..78c39dd 100644
--- a/src/hb-shape.cc
+++ b/src/hb-shape.cc
@@ -66,8 +66,16 @@
   {
     char *env = getenv ("HB_SHAPER_LIST");
     shaper_list = NULL;
-    if (!env || !*env)
+    if (!env || !*env) {
+    fallback:
+      ASSERT_STATIC ((ARRAY_LENGTH (shapers) + 1) * sizeof (*shaper_list) <= sizeof (static_buffer));
+      shaper_list = (const char **) static_buffer;
+      unsigned int i;
+      for (i = 0; i < ARRAY_LENGTH (shapers); i++)
+        shaper_list[i] = shapers[i].name;
+      shaper_list[i] = NULL;
       return;
+    }
 
     unsigned int count = 3; /* initial, fallback, null */
     for (const char *p = env; (p == strchr (p, ',')) && p++; )
@@ -76,7 +84,7 @@
     unsigned int len = strlen (env);
 
     if (count > 100 || len > 1000)
-      return;
+      goto fallback;
 
     len += count * sizeof (*shaper_list) + 1;
     char *buffer = len < sizeof (static_buffer) ? static_buffer : (char *) malloc (len);
@@ -100,7 +108,13 @@
 
   const char **shaper_list;
   char static_buffer[32];
-} env_shaper_list;
+} static_shaper_list;
+
+const char **
+hb_shape_list_shapers (void)
+{
+  return static_shaper_list.shaper_list;
+}
 
 hb_bool_t
 hb_shape_full (hb_font_t           *font,
@@ -111,7 +125,7 @@
 	       const char         **shaper_list)
 {
   if (likely (!shaper_list))
-    shaper_list = env_shaper_list.shaper_list;
+    shaper_list = static_shaper_list.shaper_list;
 
   if (likely (!shaper_list)) {
     for (unsigned int i = 0; i < ARRAY_LENGTH (shapers); i++)