diff --git a/src/hb-buffer-deserialize-text-glyphs.hh b/src/hb-buffer-deserialize-text-glyphs.hh index 6cbb64a8c..5fe75659b 100644 --- a/src/hb-buffer-deserialize-text-glyphs.hh +++ b/src/hb-buffer-deserialize-text-glyphs.hh @@ -322,7 +322,7 @@ _hb_buffer_deserialize_text_glyphs (hb_buffer_t *buffer, 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 @@ _again: #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 e42f554d0..21db14b56 100644 --- a/src/hb-buffer-deserialize-text-glyphs.rl +++ b/src/hb-buffer-deserialize-text-glyphs.rl @@ -104,7 +104,7 @@ _hb_buffer_deserialize_text_glyphs (hb_buffer_t *buffer, 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 @@ _hb_buffer_deserialize_text_glyphs (hb_buffer_t *buffer, 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 05711ca7c..8ca73bf25 100644 --- a/src/hb-buffer-deserialize-text-unicode.hh +++ b/src/hb-buffer-deserialize-text-unicode.hh @@ -172,7 +172,7 @@ _hb_buffer_deserialize_text_unicode (hb_buffer_t *buffer, 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 @@ _again: #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 d358adc92..92873b804 100644 --- a/src/hb-buffer-deserialize-text-unicode.rl +++ b/src/hb-buffer-deserialize-text-unicode.rl @@ -85,7 +85,7 @@ _hb_buffer_deserialize_text_unicode (hb_buffer_t *buffer, 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 @@ _hb_buffer_deserialize_text_unicode (hb_buffer_t *buffer, 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 42a52a460..aced1c8d1 100644 --- a/src/test-buffer-serialize.cc +++ b/src/test-buffer-serialize.cc @@ -77,7 +77,7 @@ main (int argc, char **argv) break; } - if (*p == ']' || *p == '\n') + if (*p == '\n') break; if (p == line) {