Module: wine Branch: master Commit: 7540fa5a1a0a5f98f1443e31598221f6af42e7fe URL: http://source.winehq.org/git/wine.git/?a=commit;h=7540fa5a1a0a5f98f1443e3159...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Aug 6 17:57:26 2015 +0300
dwrite: Properly initialize LOGFONT returned from ConvertFontToLOGFONT().
---
dlls/dwrite/gdiinterop.c | 2 ++ dlls/dwrite/tests/font.c | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/dlls/dwrite/gdiinterop.c b/dlls/dwrite/gdiinterop.c index 86778df..8248431 100644 --- a/dlls/dwrite/gdiinterop.c +++ b/dlls/dwrite/gdiinterop.c @@ -504,6 +504,8 @@ static HRESULT WINAPI gdiinterop_ConvertFontToLOGFONT(IDWriteGdiInterop *iface,
*is_systemfont = FALSE;
+ memset(logfont, 0, sizeof(*logfont)); + if (!font) return E_INVALIDARG;
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index 0eca7f4..327a29f 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -2731,16 +2731,48 @@ if (0) { /* crashes on native */ IDWriteGdiInterop_ConvertFontToLOGFONT(interop, NULL, &logfont, NULL); IDWriteGdiInterop_ConvertFontToLOGFONT(interop, font, NULL, &system); } + + memset(&logfont, 0xcc, sizeof(logfont)); system = TRUE; hr = IDWriteGdiInterop_ConvertFontToLOGFONT(interop, NULL, &logfont, &system); ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); ok(!system, "got %d\n", system); + ok(logfont.lfFaceName[0] == 0, "got face name %s\n", wine_dbgstr_w(logfont.lfFaceName));
system = FALSE; - memset(&logfont, 0, sizeof(logfont)); + + logfont.lfHeight = 10; + logfont.lfWidth = 11; + logfont.lfEscapement = 10; + logfont.lfOrientation = 10; + logfont.lfWeight = 0; + logfont.lfItalic = 1; + logfont.lfUnderline = 1; + logfont.lfStrikeOut = 1; + logfont.lfCharSet = 0; + logfont.lfOutPrecision = 0; + logfont.lfClipPrecision = 0; + logfont.lfQuality = 0; + logfont.lfPitchAndFamily = 0; + logfont.lfFaceName[0] = 0; + hr = IDWriteGdiInterop_ConvertFontToLOGFONT(interop, font, &logfont, &system); ok(hr == S_OK, "got 0x%08x\n", hr); ok(system, "got %d\n", system); + + ok(logfont.lfHeight == 0, "got %d\n", logfont.lfHeight); + ok(logfont.lfWidth == 0, "got %d\n", logfont.lfWidth); + ok(logfont.lfEscapement == 0, "got %d\n", logfont.lfEscapement); + ok(logfont.lfOrientation == 0, "got %d\n", logfont.lfOrientation); + ok(logfont.lfWeight > 0, "got %d\n", logfont.lfWeight); + ok(logfont.lfItalic == 0, "got %d\n", logfont.lfItalic); + ok(logfont.lfUnderline == 0, "got %d\n", logfont.lfUnderline); + ok(logfont.lfStrikeOut == 0, "got %d\n", logfont.lfStrikeOut); + ok(logfont.lfCharSet == DEFAULT_CHARSET, "got %d\n", logfont.lfCharSet); + ok(logfont.lfOutPrecision == OUT_OUTLINE_PRECIS, "got %d\n", logfont.lfOutPrecision); + ok(logfont.lfClipPrecision == 0, "got %d\n", logfont.lfClipPrecision); + ok(logfont.lfQuality == 0, "got %d\n", logfont.lfQuality); + ok(logfont.lfPitchAndFamily == 0, "got %d\n", logfont.lfPitchAndFamily); ok(logfont.lfFaceName[0] != 0, "got face name %s\n", wine_dbgstr_w(logfont.lfFaceName));
IDWriteFactory_Release(factory2);