[OT] Fix ReverseChainingSubst We should make it clear that we don't want output buffer in this case, otherwise buffer->backtrack_len() would be wrong.
diff --git a/src/hb-buffer-private.hh b/src/hb-buffer-private.hh index 67a2752..c1acffd 100644 --- a/src/hb-buffer-private.hh +++ b/src/hb-buffer-private.hh
@@ -153,6 +153,7 @@ HB_INTERNAL void guess_properties (void); HB_INTERNAL void swap_buffers (void); + HB_INTERNAL void remove_output (void); HB_INTERNAL void clear_output (void); HB_INTERNAL void clear_positions (void);
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index b65beff..1eb513c 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc
@@ -183,6 +183,19 @@ } void +hb_buffer_t::remove_output (void) +{ + if (unlikely (hb_object_is_inert (this))) + return; + + have_output = false; + have_positions = false; + + out_len = 0; + out_info = info; +} + +void hb_buffer_t::clear_output (void) { if (unlikely (hb_object_is_inert (this)))
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh index 90faa79..05b18cc 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh
@@ -1343,6 +1343,7 @@ else { /* in-place backward substitution */ + c->buffer->remove_output (); c->buffer->idx = c->buffer->len - 1; do {