From 97a58e96898a67b585419b73fa411fb4c12be54a Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Thu, 28 Apr 2016 07:59:42 -0700 Subject: [PATCH] Don't assume the first glyph is part of the first char Shaper::save_glyph_results incorrectly starts its loop by setting glyph_span to a length of 1. This means that the `if glyph_span.len() == 0` test in the inner loop will never succeed. Instead the glyph span should start out empty, and a glyph should be added only as the corresponding char is found. For comparison, see the Gecko code this was ported from: https://hg.mozilla.org/mozilla-central/file/ab0044bf/gfx/thebes/gfxHarfBuzzShaper.cpp#l1682 --- components/gfx/text/shaping/harfbuzz.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/components/gfx/text/shaping/harfbuzz.rs b/components/gfx/text/shaping/harfbuzz.rs index ef472d8f4cc..72bf4158149 100644 --- a/components/gfx/text/shaping/harfbuzz.rs +++ b/components/gfx/text/shaping/harfbuzz.rs @@ -323,9 +323,8 @@ impl Shaper { // in cases with complex glyph-character associations, 2+ glyphs and 1+ chars can be // processed. while glyph_span.start < glyph_count { - // start by looking at just one glyph. - glyph_span.end += 1; debug!("Processing glyph at idx={}", glyph_span.start); + glyph_span.end = glyph_span.start; let char_byte_start = glyph_data.byte_offset_of_glyph(glyph_span.start) as usize; char_byte_span = char_byte_start..char_byte_start;