From 3d7fabf62788f6ea41e48d3daad05aa776d8bc1f Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Thu, 30 Mar 2017 15:07:02 +0300 Subject: [PATCH] dwrite: Fix off by one error in glyph count adjustment. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/dwrite/layout.c | 5 ++--- dlls/dwrite/tests/layout.c | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index a7fff463661..590b2c5ad93 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -1269,10 +1269,9 @@ static HRESULT layout_add_effective_run(struct dwrite_textlayout *layout, const run->line = line; if (r->u.regular.run.glyphCount) { - /* trim from the left */ + /* Trim leading and trailing clusters. */ run->glyphcount = r->u.regular.run.glyphCount - r->u.regular.clustermap[start]; - /* trim from the right */ - if (start + length < r->u.regular.descr.stringLength - 1) + if (start + length < r->u.regular.descr.stringLength) run->glyphcount -= r->u.regular.run.glyphCount - r->u.regular.clustermap[start + length]; } else diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index c097e20cfcc..daffd81600f 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -1626,7 +1626,7 @@ static void test_Draw(void) flush_sequence(sequences, RENDERER_ID); hr = IDWriteTextLayout_Draw(layout, &ctxt, &testrenderer, 0.0, 0.0); ok(hr == S_OK, "got 0x%08x\n", hr); - ok_sequence(sequences, RENDERER_ID, draw_seq, "draw test", TRUE); + ok_sequence(sequences, RENDERER_ID, draw_seq, "draw test", FALSE); IDWriteTextLayout_Release(layout); /* with reduced width DrawGlyphRun() is called for every line */ @@ -4987,7 +4987,7 @@ todo_wine flush_sequence(sequences, RENDERER_ID); hr = IDWriteTextLayout_Draw(layout, NULL, &testrenderer, 0.0f, 0.0f); ok(hr == S_OK, "got 0x%08x\n", hr); - ok_sequence(sequences, RENDERER_ID, drawunderline4_seq, "draw underline test 4", TRUE); + ok_sequence(sequences, RENDERER_ID, drawunderline4_seq, "draw underline test 4", FALSE); IDWriteTextLayout_Release(layout);