Handle allocation failure in hb-language code
diff --git a/src/hb-common.cc b/src/hb-common.cc
index daba0c5..4716cfb 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -227,9 +227,12 @@
*/
size_t len = strlen(s) + 1;
lang = (hb_language_t) malloc(len);
- memcpy((unsigned char *) lang, s, len);
- for (unsigned char *p = (unsigned char *) lang; *p; p++)
- *p = canon_map[*p];
+ if (likely (lang))
+ {
+ memcpy((unsigned char *) lang, s, len);
+ for (unsigned char *p = (unsigned char *) lang; *p; p++)
+ *p = canon_map[*p];
+ }
return *this;
}
@@ -271,6 +274,11 @@
return NULL;
lang->next = first_lang;
*lang = key;
+ if (unlikely (!lang->lang))
+ {
+ free (lang);
+ return NULL;
+ }
if (!hb_atomic_ptr_cmpexch (&langs, first_lang, lang)) {
lang->finish ();