[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
{