Nikolay Sivov : dwrite: Block attempts of registering local file loader.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Oct 27 05:36:37 CDT 2014


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Oct 27 11:24:47 2014 +0300

dwrite: Block attempts of registering local file loader.

---

 dlls/dwrite/main.c       |  6 ++++++
 dlls/dwrite/tests/font.c | 16 ++++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c
index 1e10431..05d853f 100644
--- a/dlls/dwrite/main.c
+++ b/dlls/dwrite/main.c
@@ -813,6 +813,9 @@ static HRESULT WINAPI dwritefactory_RegisterFontFileLoader(IDWriteFactory *iface
     if (!loader)
         return E_INVALIDARG;
 
+    if ((IDWriteFontFileLoader*)This->localfontfileloader == loader)
+        return S_OK;
+
     if (factory_get_file_loader(This, loader))
         return DWRITE_E_ALREADYREGISTERED;
 
@@ -838,6 +841,9 @@ static HRESULT WINAPI dwritefactory_UnregisterFontFileLoader(IDWriteFactory *ifa
     if (!loader)
         return E_INVALIDARG;
 
+    if ((IDWriteFontFileLoader*)This->localfontfileloader == loader)
+        return S_OK;
+
     found = factory_get_file_loader(This, loader);
     if (!found)
         return E_INVALIDARG;
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 2b84ba1..d9e927f 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -885,8 +885,7 @@ static void test_system_fontcollection(void)
     ok(coll2 == collection, "got %p, was %p\n", coll2, collection);
     IDWriteFontCollection_Release(coll2);
 
-    hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_ISOLATED, &IID_IDWriteFactory, (IUnknown**)&factory2);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    factory2 = create_factory();
     hr = IDWriteFactory_GetSystemFontCollection(factory2, &coll2, FALSE);
     ok(hr == S_OK, "got 0x%08x\n", hr);
     ok(coll2 != collection, "got %p, was %p\n", coll2, collection);
@@ -943,6 +942,19 @@ if (file) {
     ok(hr == S_OK || broken(hr == DWRITE_E_ALREADYREGISTERED), "got 0x%08x\n", hr);
     hr = IDWriteFactory_UnregisterFontFileLoader(factory, loader);
     ok(hr == S_OK || broken(hr == E_INVALIDARG), "got 0x%08x\n", hr);
+
+    /* try with a different factory */
+    factory2 = create_factory();
+    hr = IDWriteFactory_RegisterFontFileLoader(factory2, loader);
+    ok(hr == S_OK || broken(hr == DWRITE_E_ALREADYREGISTERED), "got 0x%08x\n", hr);
+    hr = IDWriteFactory_RegisterFontFileLoader(factory2, loader);
+    ok(hr == DWRITE_E_ALREADYREGISTERED, "got 0x%08x\n", hr);
+    hr = IDWriteFactory_UnregisterFontFileLoader(factory2, loader);
+    ok(hr == S_OK || broken(hr == E_INVALIDARG), "got 0x%08x\n", hr);
+    hr = IDWriteFactory_UnregisterFontFileLoader(factory2, loader);
+    ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+    IDWriteFactory_Release(factory2);
+
     IDWriteFontFileLoader_Release(loader);
 }
     ret = TRUE;




More information about the wine-cvs mailing list