[deserialize] Some more
diff --git a/src/hb-buffer-deserialize-text-glyphs.hh b/src/hb-buffer-deserialize-text-glyphs.hh
index 6cbb64a..5fe7565 100644
--- a/src/hb-buffer-deserialize-text-glyphs.hh
+++ b/src/hb-buffer-deserialize-text-glyphs.hh
@@ -322,7 +322,7 @@
 				    const char **end_ptr,
 				    hb_font_t *font)
 {
-  const char *p = buf, *pe = buf + buf_len, *eof = pe;
+  const char *p = buf, *pe = buf + buf_len, *eof = pe, *orig_pe = pe;
 
   /* Ensure we have positions. */
   (void) hb_buffer_get_glyph_positions (buffer, nullptr);
@@ -677,6 +677,13 @@
 #line 136 "hb-buffer-deserialize-text-glyphs.rl"
 
 
+  if (pe < orig_pe && *pe == ']')
+  {
+    pe++;
+    if (p == pe)
+      p++;
+  }
+
   *end_ptr = p;
 
   return p == pe;
diff --git a/src/hb-buffer-deserialize-text-glyphs.rl b/src/hb-buffer-deserialize-text-glyphs.rl
index e42f554..21db14b 100644
--- a/src/hb-buffer-deserialize-text-glyphs.rl
+++ b/src/hb-buffer-deserialize-text-glyphs.rl
@@ -104,7 +104,7 @@
 				    const char **end_ptr,
 				    hb_font_t *font)
 {
-  const char *p = buf, *pe = buf + buf_len, *eof = pe;
+  const char *p = buf, *pe = buf + buf_len, *eof = pe, *orig_pe = pe;
 
   /* Ensure we have positions. */
   (void) hb_buffer_get_glyph_positions (buffer, nullptr);
@@ -135,6 +135,13 @@
     write exec;
   }%%
 
+  if (pe < orig_pe && *pe == ']')
+  {
+    pe++;
+    if (p == pe)
+      p++;
+  }
+
   *end_ptr = p;
 
   return p == pe;
diff --git a/src/hb-buffer-deserialize-text-unicode.hh b/src/hb-buffer-deserialize-text-unicode.hh
index 05711ca..8ca73bf 100644
--- a/src/hb-buffer-deserialize-text-unicode.hh
+++ b/src/hb-buffer-deserialize-text-unicode.hh
@@ -172,7 +172,7 @@
 				     const char **end_ptr,
 				     hb_font_t *font)
 {
-  const char *p = buf, *pe = buf + buf_len, *eof = pe;
+  const char *p = buf, *pe = buf + buf_len, *eof = pe, *orig_pe = pe;
 
   while (p < pe && ISSPACE (*p))
     p++;
@@ -317,6 +317,13 @@
 #line 115 "hb-buffer-deserialize-text-unicode.rl"
 
 
+  if (pe < orig_pe && *pe == '>')
+  {
+    pe++;
+    if (p == pe)
+      p++;
+  }
+
   *end_ptr = p;
 
   return p == pe;
diff --git a/src/hb-buffer-deserialize-text-unicode.rl b/src/hb-buffer-deserialize-text-unicode.rl
index d358adc..92873b8 100644
--- a/src/hb-buffer-deserialize-text-unicode.rl
+++ b/src/hb-buffer-deserialize-text-unicode.rl
@@ -85,7 +85,7 @@
 				     const char **end_ptr,
 				     hb_font_t *font)
 {
-  const char *p = buf, *pe = buf + buf_len, *eof = pe;
+  const char *p = buf, *pe = buf + buf_len, *eof = pe, *orig_pe = pe;
 
   while (p < pe && ISSPACE (*p))
     p++;
@@ -114,6 +114,13 @@
     write exec;
   }%%
 
+  if (pe < orig_pe && *pe == '>')
+  {
+    pe++;
+    if (p == pe)
+      p++;
+  }
+
   *end_ptr = p;
 
   return p == pe;
diff --git a/src/test-buffer-serialize.cc b/src/test-buffer-serialize.cc
index 42a52a4..aced1c8 100644
--- a/src/test-buffer-serialize.cc
+++ b/src/test-buffer-serialize.cc
@@ -77,7 +77,7 @@
         break;
       }
 
-      if (*p == ']' || *p == '\n')
+      if (*p == '\n')
         break;
       if (p == line)
       {