Nikolay Sivov : dwrite: Block negative max height/width for layout.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 15 11:37:25 CDT 2014


Module: wine
Branch: master
Commit: 617f668f49ddd6293799c29f8614fee4af60991d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=617f668f49ddd6293799c29f8614fee4af60991d

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Oct 14 10:03:28 2014 +0400

dwrite: Block negative max height/width for layout.

---

 dlls/dwrite/layout.c       |  8 ++++++++
 dlls/dwrite/tests/layout.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)

diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index c48a7c1..0afd466 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -772,6 +772,10 @@ static HRESULT WINAPI dwritetextlayout_SetMaxWidth(IDWriteTextLayout2 *iface, FL
 {
     struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
     TRACE("(%p)->(%.1f)\n", This, maxWidth);
+
+    if (maxWidth < 0.0)
+        return E_INVALIDARG;
+
     This->maxwidth = maxWidth;
     return S_OK;
 }
@@ -780,6 +784,10 @@ static HRESULT WINAPI dwritetextlayout_SetMaxHeight(IDWriteTextLayout2 *iface, F
 {
     struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
     TRACE("(%p)->(%.1f)\n", This, maxHeight);
+
+    if (maxHeight < 0.0)
+        return E_INVALIDARG;
+
     This->maxheight = maxHeight;
     return S_OK;
 }
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index bff9d15..0975ee8 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -550,6 +550,7 @@ static void test_fontweight(void)
     IDWriteTextLayout *layout;
     DWRITE_FONT_WEIGHT weight;
     DWRITE_TEXT_RANGE range;
+    FLOAT size;
     HRESULT hr;
 
     hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_BOLD, DWRITE_FONT_STYLE_NORMAL,
@@ -581,6 +582,48 @@ static void test_fontweight(void)
     ok(weight == DWRITE_FONT_WEIGHT_NORMAL, "got %d\n", weight);
     ok(range.length == 6, "got %d\n", range.length);
 
+    size = IDWriteTextLayout_GetMaxWidth(layout);
+    ok(size == 100.0, "got %.2f\n", size);
+
+    hr = IDWriteTextLayout_SetMaxWidth(layout, 0.0);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    size = IDWriteTextLayout_GetMaxWidth(layout);
+    ok(size == 0.0, "got %.2f\n", size);
+
+    hr = IDWriteTextLayout_SetMaxWidth(layout, -1.0);
+    ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+    size = IDWriteTextLayout_GetMaxWidth(layout);
+    ok(size == 0.0, "got %.2f\n", size);
+
+    hr = IDWriteTextLayout_SetMaxWidth(layout, 100.0);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    size = IDWriteTextLayout_GetMaxWidth(layout);
+    ok(size == 100.0, "got %.2f\n", size);
+
+    size = IDWriteTextLayout_GetMaxHeight(layout);
+    ok(size == 100.0, "got %.2f\n", size);
+
+    hr = IDWriteTextLayout_SetMaxHeight(layout, 0.0);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    size = IDWriteTextLayout_GetMaxHeight(layout);
+    ok(size == 0.0, "got %.2f\n", size);
+
+    hr = IDWriteTextLayout_SetMaxHeight(layout, -1.0);
+    ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+    size = IDWriteTextLayout_GetMaxHeight(layout);
+    ok(size == 0.0, "got %.2f\n", size);
+
+    hr = IDWriteTextLayout_SetMaxHeight(layout, 100.0);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    size = IDWriteTextLayout_GetMaxHeight(layout);
+    ok(size == 100.0, "got %.2f\n", size);
+
     IDWriteTextLayout_Release(layout);
     IDWriteTextFormat_Release(fmt2);
     IDWriteTextFormat_Release(format);




More information about the wine-cvs mailing list