[PATCH] mfplat: Don't unregister MFTs when registering with empty factories.

Sergio Gómez Del Real sdelreal at codeweavers.com
Tue Apr 21 16:54:50 CDT 2020


Signed-off-by: Sergio Gómez Del Real <sdelreal at codeweavers.com>
---
 dlls/mfplat/main.c         |  2 +-
 dlls/mfplat/tests/mfplat.c | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 923905399b..32f367a00e 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -901,7 +901,7 @@ static HRESULT mft_register_local(IClassFactory *factory, REFCLSID clsid, REFGUI
 
     LIST_FOR_EACH_ENTRY(cur, &local_mfts, struct mft_registration, entry)
     {
-        if (cur->factory == factory)
+        if (factory && cur->factory == factory)
         {
             unreg_mft = cur;
             list_remove(&cur->entry);
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 007db891c1..4d3d4a72a0 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -4528,6 +4528,17 @@ static void test_MFTRegisterLocal(void)
 
     hr = pMFTUnregisterLocalByCLSID(MFT_CATEGORY_OTHER);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+    hr = pMFTRegisterLocalByCLSID(&MFT_CATEGORY_OTHER, &MFT_CATEGORY_OTHER, L"Local MFT name 1", 0, 1, input_types,
+            0, NULL);
+    ok(hr == S_OK, "Failed to register MFT, hr %#x.\n", hr);
+    hr = pMFTRegisterLocalByCLSID(&MFT_CATEGORY_OTHER, &MFT_CATEGORY_OTHER, L"Local MFT name 2", 0, 1, input_types,
+            0, NULL);
+    ok(hr == S_OK, "Failed to register MFT, hr %#x.\n", hr);
+    hr = pMFTEnumEx(MFT_CATEGORY_OTHER, MFT_ENUM_FLAG_LOCALMFT, NULL, NULL, &activate, &count);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(count == 2, "Unexpected count %u.\n", count);
+    CoTaskMemFree(activate);
 }
 
 static void test_queue_com(void)
-- 
2.17.1




More information about the wine-devel mailing list