m[buffer] In hb_buffer_append() don't change until allocation success
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc
index 11826b1..3c54f72 100644
--- a/src/hb-buffer.cc
+++ b/src/hb-buffer.cc
@@ -1772,11 +1772,6 @@
   if (start == end)
     return;
 
-  if (!buffer->len)
-    buffer->content_type = source->content_type;
-  if (!buffer->have_positions && source->have_positions)
-    buffer->clear_positions ();
-
   if (buffer->len + (end - start) < buffer->len) /* Overflows. */
   {
     buffer->successful = false;
@@ -1788,6 +1783,11 @@
   if (unlikely (!buffer->successful))
     return;
 
+  if (!orig_len)
+    buffer->content_type = source->content_type;
+  if (!buffer->have_positions && source->have_positions)
+    buffer->clear_positions ();
+
   memcpy (buffer->info + orig_len, source->info + start, (end - start) * sizeof (buffer->info[0]));
   if (buffer->have_positions)
     memcpy (buffer->pos + orig_len, source->pos + start, (end - start) * sizeof (buffer->pos[0]));