[API] Add HB_LANGUAGE_INVALID
diff --git a/src/hb-common.cc b/src/hb-common.cc
index 20993c6..a886474 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -169,16 +169,17 @@
 hb_language_from_string (const char *str)
 {
   if (!str || !*str)
-    return NULL;
+    return HB_LANGUAGE_INVALID;
 
   hb_language_item_t *item = langs.find_or_insert (str, langs_lock);
 
-  return likely (item) ? item->lang : NULL;
+  return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
 }
 
 const char *
 hb_language_to_string (hb_language_t language)
 {
+  /* This is actually NULL-safe! */
   return language->s;
 }
 
diff --git a/src/hb-common.h b/src/hb-common.h
index a30587a..f0fe63a 100644
--- a/src/hb-common.h
+++ b/src/hb-common.h
@@ -114,6 +114,8 @@
 const char *
 hb_language_to_string (hb_language_t language);
 
+#define HB_LANGUAGE_INVALID ((hb_language_t) NULL)
+
 hb_language_t
 hb_language_get_default (void);
 
diff --git a/src/hb-ot-tag.cc b/src/hb-ot-tag.cc
index 5d47115..9fb6f10 100644
--- a/src/hb-ot-tag.cc
+++ b/src/hb-ot-tag.cc
@@ -610,7 +610,7 @@
   const char *lang_str, *s;
   const LangTag *lang_tag;
 
-  if (language == NULL)
+  if (language == HB_LANGUAGE_INVALID)
     return HB_OT_TAG_DEFAULT_LANGUAGE;
 
   lang_str = hb_language_to_string (language);
diff --git a/src/hb-shape.cc b/src/hb-shape.cc
index fccb81e..8855eaf 100644
--- a/src/hb-shape.cc
+++ b/src/hb-shape.cc
@@ -79,7 +79,7 @@
   }
 
   /* If language is not set, use default language from locale */
-  if (buffer->props.language == NULL) {
+  if (buffer->props.language == HB_LANGUAGE_INVALID) {
     /* TODO get_default_for_script? using $LANGUAGE */
     buffer->props.language = hb_language_get_default ();
   }
diff --git a/test/test-common.c b/test/test-common.c
index c1e3175..a75138c 100644
--- a/test/test-common.c
+++ b/test/test-common.c
@@ -156,6 +156,8 @@
   hb_language_t fa_ir = hb_language_from_string ("fa-ir");
   hb_language_t en = hb_language_from_string ("en");
 
+  g_assert (HB_LANGUAGE_INVALID == NULL);
+
   g_assert (fa != NULL);
   g_assert (fa_IR != NULL);
   g_assert (fa_IR == fa_ir);
@@ -167,13 +169,14 @@
   g_assert (en == hb_language_from_string ("en"));
   g_assert (en == hb_language_from_string ("eN"));
 
-  g_assert (NULL == hb_language_from_string (NULL));
-  g_assert (NULL == hb_language_from_string (""));
+  g_assert (HB_LANGUAGE_INVALID == hb_language_from_string (NULL));
+  g_assert (HB_LANGUAGE_INVALID == hb_language_from_string (""));
+  g_assert (NULL == hb_language_to_string (HB_LANGUAGE_INVALID));
 
   /* Not sure how to test this better.  Setting env vars
    * here doesn't sound like the right approach, and I'm
    * not sure that it even works. */
-  g_assert (NULL != hb_language_get_default ());
+  g_assert (HB_LANGUAGE_INVALID != hb_language_get_default ());
 }
 
 int