This patch fixes regression caused by 097811f2513e457ebf4afb1d2d21ab90b8684325, and reported in the bug 47190.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/urlmon/bindprot.c | 23 +++++++++++++++-------- dlls/urlmon/tests/protocol.c | 3 --- 2 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c index 42d3d21925..e9c97e8a9d 100644 --- a/dlls/urlmon/bindprot.c +++ b/dlls/urlmon/bindprot.c @@ -509,15 +509,19 @@ 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); + if(SUCCEEDED(hres)) + This->protocol_unk = protocol_unk; + else + IUnknown_Release(protocol_unk); + } + else if(hres == CLASS_E_NOAGGREGATION) + hres = IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocol, (void**)&protocol); + IClassFactory_Release(cf); if(FAILED(hres)) return hres; - - hres = IUnknown_QueryInterface(protocol_unk, &IID_IInternetProtocol, (void**)&protocol); - if(FAILED(hres)) { - IUnknown_Release(protocol_unk); - return hres; - } }
StringFromCLSID(&clsid, &clsid_str); @@ -703,8 +707,11 @@ static HRESULT WINAPI ProtocolHandler_Terminate(IInternetProtocol *iface, DWORD
if(This->protocol) { IInternetProtocol_Terminate(This->protocol, 0); - IInternetProtocol_Release(This->protocol); - This->protocol = NULL; + + if (This->protocol_unk) { + IInternetProtocol_Release(This->protocol); + This->protocol = NULL; + } }
set_binding_sink(This, NULL, NULL); diff --git a/dlls/urlmon/tests/protocol.c b/dlls/urlmon/tests/protocol.c index eb8b1099d7..20a8e89d0d 100644 --- a/dlls/urlmon/tests/protocol.c +++ b/dlls/urlmon/tests/protocol.c @@ -3884,9 +3884,7 @@ static void test_CreateBinding(void) trace("Start >\n"); expect_hrResult = S_OK; hres = IInternetProtocol_Start(protocol, test_url, &protocol_sink, &bind_info, 0, 0); -todo_wine_if (no_aggregation) ok(hres == S_OK, "Start failed: %08x\n", hres); - if (hres != S_OK) goto fail; trace("Start <\n");
CHECK_CALLED(QueryService_InternetProtocol); @@ -4040,7 +4038,6 @@ todo_wine_if (no_aggregation) ok(hres == MK_E_SYNTAX, "Start failed: %08x, expected MK_E_SYNTAX\n", hres); CHECK_CALLED(QueryService_InternetProtocol);
-fail: IInternetProtocol_Release(protocol);
IInternetSession_Release(session);