From d03f11f246efec13e48fd68a9ce136db771b22bf Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 4 Sep 2017 20:14:13 -0700 Subject: [PATCH] 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! --- src/hb-buffer.cc | 2 +- src/hb-buffer.h | 4 ++-- util/options.hh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index 6b05d3a6a..171d1016e 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -1893,7 +1893,7 @@ hb_buffer_diff (hb_buffer_t *buffer, 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 ffbf66ee1..1d633f7dc 100644 --- a/src/hb-buffer.h +++ b/src/hb-buffer.h @@ -481,12 +481,12 @@ typedef enum { /*< flags >*/ /* 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 b24ab0c8e..9feee2dc0 100644 --- a/util/options.hh +++ b/util/options.hh @@ -414,7 +414,7 @@ struct shape_options_t : option_group_t } 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)