[PATCH 2/5] dwrite: Don't create enumerator with invalid palette
Nikolay Sivov
bunglehead at gmail.com
Mon Feb 8 03:31:17 CST 2016
---
-------------- next part --------------
From 77f1c0f1e8f36ad0edba68d0eb1d6997103bbcdb Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon, 8 Feb 2016 11:27:24 +0300
Subject: [PATCH 2/5] dwrite: Don't create enumerator with invalid palette
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dwrite/font.c | 2 +-
dlls/dwrite/tests/font.c | 31 +++++++++++++++++++++++++++++--
2 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index d466612..18e4e0e 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -4643,7 +4643,7 @@ HRESULT create_colorglyphenum(FLOAT originX, FLOAT originY, const DWRITE_GLYPH_R
return hr;
}
- colorfont = IDWriteFontFace2_IsColorFont(fontface2);
+ colorfont = IDWriteFontFace2_IsColorFont(fontface2) && IDWriteFontFace2_GetColorPaletteCount(fontface2) > palette;
IDWriteFontFace2_Release(fontface2);
if (!colorfont)
return DWRITE_E_NOCOLOR;
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index b77d0cd..76d76f7 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -5137,6 +5137,7 @@ static void test_TranslateColorGlyphRun(void)
{
IDWriteColorGlyphRunEnumerator *layers;
const DWRITE_COLOR_GLYPH_RUN *colorrun;
+ IDWriteFontFace2 *fontface2;
IDWriteFontFace *fontface;
IDWriteFactory2 *factory2;
IDWriteFactory *factory;
@@ -5200,9 +5201,12 @@ static void test_TranslateColorGlyphRun(void)
layers = NULL;
hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0, 0.0, &run, NULL,
DWRITE_MEASURING_MODE_NATURAL, NULL, 0, &layers);
+todo_wine {
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(layers != NULL, "got %p\n", layers);
+}
+if (layers) {
while (1) {
hasrun = FALSE;
hr = IDWriteColorGlyphRunEnumerator_MoveNext(layers, &hasrun);
@@ -5219,6 +5223,26 @@ todo_wine
ok(hr == E_NOT_VALID_STATE, "got 0x%08x\n", hr);
IDWriteColorGlyphRunEnumerator_Release(layers);
+}
+ hr = IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace2, (void**)&fontface2);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* invalid palette index */
+ layers = (void*)0xdeadbeef;
+ hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0f, 0.0f, &run, NULL,
+ DWRITE_MEASURING_MODE_NATURAL, NULL, IDWriteFontFace2_GetColorPaletteCount(fontface2),
+ &layers);
+ ok(hr == DWRITE_E_NOCOLOR, "got 0x%08x\n", hr);
+ ok(layers == NULL, "got %p\n", layers);
+
+ layers = NULL;
+ hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0f, 0.0f, &run, NULL,
+ DWRITE_MEASURING_MODE_NATURAL, NULL, IDWriteFontFace2_GetColorPaletteCount(fontface2) - 1,
+ &layers);
+todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+if (layers)
+ IDWriteColorGlyphRunEnumerator_Release(layers);
/* color font, glyph without color info */
codepoints[0] = 'A';
@@ -5228,10 +5252,9 @@ todo_wine
layers = (void*)0xdeadbeef;
hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0, 0.0, &run, NULL,
DWRITE_MEASURING_MODE_NATURAL, NULL, 0, &layers);
-todo_wine {
ok(hr == DWRITE_E_NOCOLOR, "got 0x%08x\n", hr);
ok(layers == NULL, "got %p\n", layers);
-}
+
/* one glyph with, one without */
codepoints[0] = 'A';
codepoints[1] = 0x26c4;
@@ -5244,10 +5267,14 @@ todo_wine {
layers = NULL;
hr = IDWriteFactory2_TranslateColorGlyphRun(factory2, 0.0, 0.0, &run, NULL,
DWRITE_MEASURING_MODE_NATURAL, NULL, 0, &layers);
+todo_wine {
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(layers != NULL, "got %p\n", layers);
+}
+if (layers)
IDWriteColorGlyphRunEnumerator_Release(layers);
+ IDWriteFontFace2_Release(fontface2);
IDWriteFontFace_Release(fontface);
IDWriteFactory2_Release(factory2);
}
--
2.7.0
More information about the wine-patches
mailing list