Fix buffer_diff for empty buffers
If buffers are empty, content type should be ignored.
This fixes last of the failing tests: fuzzed.tests. Green again!
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc
index 6b05d3a..171d101 100644
--- a/src/hb-buffer.cc
+++ b/src/hb-buffer.cc
@@ -1893,7 +1893,7 @@
hb_codepoint_t dottedcircle_glyph,
unsigned int position_fuzz)
{
- if (buffer->content_type != reference->content_type)
+ if (buffer->content_type != reference->content_type && buffer->len && reference->len)
return HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH;
hb_buffer_diff_flags_t result = HB_BUFFER_DIFF_FLAG_EQUAL;
diff --git a/src/hb-buffer.h b/src/hb-buffer.h
index ffbf66e..1d633f7 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -481,12 +481,12 @@
/* Buffers with different content_type cannot be meaningfully compared
* in any further detail. */
- HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH = 0X0001,
+ HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH = 0x0001,
/* For buffers with differing length, the per-glyph comparison is not
* attempted, though we do still scan reference for dottedcircle / .notdef
* glyphs. */
- HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH = 0X0002,
+ HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH = 0x0002,
/* We want to know if dottedcircle / .notdef glyphs are present in the
* reference, as we may not care so much about other differences in this
diff --git a/util/options.hh b/util/options.hh
index b24ab0c..9feee2d 100644
--- a/util/options.hh
+++ b/util/options.hh
@@ -414,7 +414,7 @@
}
bool ret = true;
- hb_buffer_diff_flags_t diff = hb_buffer_diff (buffer, reconstruction, (hb_codepoint_t) -1, 0);
+ hb_buffer_diff_flags_t diff = hb_buffer_diff (reconstruction, buffer, (hb_codepoint_t) -1, 0);
if (diff)
{
if (error)