src/hb-set-private.hh | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-)
New commits: commit 30a591e3cef67818ef1ffec92c6a022b5a5f5e77 Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 23 14:28:35 2017 -0400 [set] Rewrite another way :P diff --git a/src/hb-set-private.hh b/src/hb-set-private.hh index 58864287..0454a189 100644 --- a/src/hb-set-private.hh +++ b/src/hb-set-private.hh @@ -274,11 +274,11 @@ struct hb_set_t { if (unlikely (in_error)) return; - int na = pages.len; - int nb = other->pages.len; + unsigned int na = pages.len; + unsigned int nb = other->pages.len; unsigned int count = 0; - int a = 0, b = 0; + unsigned int a = 0, b = 0; for (; a < na && b < nb; ) { if (page_map[a].major == other->page_map[b].major) @@ -309,34 +309,35 @@ struct hb_set_t return; /* Process in-place backward. */ - a = na - 1, b = nb - 1; - for (; a >= 0 && b >= 0; ) + a = na; + b = nb; + for (; a && b; ) { if (page_map[a].major == other->page_map[b].major) { - Op::process (page_at (--count).v, page_at (a).v, other->page_at (b).v); a--; b--; + Op::process (page_at (--count).v, page_at (a).v, other->page_at (b).v); } else if (page_map[a].major > other->page_map[b].major) { + a--; if (Op::passthru_left) page_at (--count).v = page_at (a).v; - a--; } else { + b--; if (Op::passthru_right) page_at (--count).v = other->page_at (b).v; - b--; } } if (Op::passthru_left) - while (a >= 0) - page_at (--count).v = page_at (a--).v; + while (a) + page_at (--count).v = page_at (--a).v; if (Op::passthru_right) - while (b >= 0) - page_at (--count).v = other->page_at (b--).v; + while (b) + page_at (--count).v = other->page_at (--b).v; assert (!count); } commit 8170801d78a5bf9480d8c06ade849b30bc4e2956 Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 23 14:26:48 2017 -0400 [set] Fix crash Ouch! That's what happens when one plays with increment/decrement operators! Fixes https://github.com/behdad/harfbuzz/issues/578 diff --git a/src/hb-set-private.hh b/src/hb-set-private.hh index de34d172..58864287 100644 --- a/src/hb-set-private.hh +++ b/src/hb-set-private.hh @@ -331,10 +331,12 @@ struct hb_set_t b--; } } - while (a >= 0) - page_at (--count).v = page_at (--a).v; - while (b >= 0) - page_at (--count).v = other->page_at (--b).v; + if (Op::passthru_left) + while (a >= 0) + page_at (--count).v = page_at (a--).v; + if (Op::passthru_right) + while (b >= 0) + page_at (--count).v = other->page_at (b--).v; assert (!count); } _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz