[PATCH 2/2] urlmon: If ProtocolCF_CreateInstance doesn't support aggregation retry without it.
Dmitry Timoshkov
dmitry at baikal.ru
Mon May 20 01:44:10 CDT 2019
This patch fixes regression caused by 097811f2513e457ebf4afb1d2d21ab90b8684325,
and reported in the bug 47190.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/urlmon/bindprot.c | 17 +++++++++++++----
dlls/urlmon/tests/url.c | 3 ---
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c
index 42d3d21925..4334d2336b 100644
--- a/dlls/urlmon/bindprot.c
+++ b/dlls/urlmon/bindprot.c
@@ -509,13 +509,22 @@ static HRESULT WINAPI BindProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr
hres = IClassFactory_CreateInstance(cf, (IUnknown*)&This->IInternetBindInfo_iface,
&IID_IUnknown, (void**)&protocol_unk);
+ if(SUCCEEDED(hres))
+ hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetProtocol, (void**)&protocol);
+ else if (hres == CLASS_E_NOAGGREGATION)
+ {
+ hres = IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocol, (void**)&protocol);
+ if(SUCCEEDED(hres))
+ {
+ protocol_unk = (IUnknown*)protocol;
+ IUnknown_AddRef(protocol_unk);
+ }
+ }
IClassFactory_Release(cf);
- if(FAILED(hres))
- return hres;
- hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetProtocol, (void**)&protocol);
if(FAILED(hres)) {
- IUnknown_Release(protocol_unk);
+ if (protocol_unk)
+ IUnknown_Release(protocol_unk);
return hres;
}
}
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c
index 84dedc07f4..5f3199ba37 100644
--- a/dlls/urlmon/tests/url.c
+++ b/dlls/urlmon/tests/url.c
@@ -3109,11 +3109,8 @@ static void test_BindToStorage(int protocol, DWORD flags, DWORD t)
ok(hres == MK_S_ASYNCHRONOUS, "IMoniker_BindToStorage failed: %08x\n", hres);
else if(no_callback) {
if(emulate_protocol)
- todo_wine_if(no_aggregation)
ok( WaitForSingleObject(complete_event2, 3000) == WAIT_OBJECT_0, "wait timed out\n" );
- todo_wine_if(no_aggregation)
ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres);
- todo_wine_if(no_aggregation)
ok(unk != NULL, "unk == NULL\n");
}else if(!(bindf & BINDF_ASYNCHRONOUS) && tymed == TYMED_FILE) {
ok(hres == S_OK, "IMoniker_BindToStorage failed: %08x\n", hres);
--
2.20.1
More information about the wine-devel
mailing list