Module: wine Branch: master Commit: dee2fd11479a0c2cab1ed4267abab1507b6eb017 URL: https://source.winehq.org/git/wine.git/?a=commit;h=dee2fd11479a0c2cab1ed4267...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Jan 23 02:03:02 2020 +0300
ole32: Handle GetObject() failure in ParseDisplayName() for item moniker.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/itemmoniker.c | 10 ++++++---- dlls/ole32/tests/moniker.c | 4 ---- 2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/dlls/ole32/itemmoniker.c b/dlls/ole32/itemmoniker.c index 79fb293c38..73ed63fe6d 100644 --- a/dlls/ole32/itemmoniker.c +++ b/dlls/ole32/itemmoniker.c @@ -790,13 +790,15 @@ static HRESULT WINAPI ItemMonikerImpl_ParseDisplayName(IMoniker *iface, IBindCtx { hr = IOleItemContainer_GetObject(container, This->itemName, get_bind_speed_from_bindctx(pbc), pbc, &IID_IParseDisplayName, (void **)&parser); + if (SUCCEEDED(hr)) + { + hr = IMoniker_GetDisplayName(iface,pbc,NULL,&displayName);
- hr = IMoniker_GetDisplayName(iface,pbc,NULL,&displayName); - - hr = IParseDisplayName_ParseDisplayName(parser, pbc, displayName, eaten, ppmkOut); + hr = IParseDisplayName_ParseDisplayName(parser, pbc, displayName, eaten, ppmkOut);
+ IParseDisplayName_Release(parser); + } IOleItemContainer_Release(container); - IParseDisplayName_Release(parser); }
return hr; diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index bbd964e723..7607468d01 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -2141,28 +2141,24 @@ todo_wine hr = IBindCtx_SetBindOptions(bindctx, &bind_opts); ok(hr == S_OK, "Failed to set bind options, hr %#x.\n", hr); hr = IMoniker_ParseDisplayName(moniker, bindctx, &container_moniker->IMoniker_iface, displayname, &eaten, &moniker2); -todo_wine ok(hr == (0x8bee0000 | BINDSPEED_INDEFINITE), "Unexpected hr %#x.\n", hr);
bind_opts.dwTickCountDeadline = 1; hr = IBindCtx_SetBindOptions(bindctx, &bind_opts); ok(hr == S_OK, "Failed to set bind options, hr %#x.\n", hr); hr = IMoniker_ParseDisplayName(moniker, bindctx, &container_moniker->IMoniker_iface, displayname, &eaten, &moniker2); -todo_wine ok(hr == (0x8bee0000 | BINDSPEED_IMMEDIATE), "Unexpected hr %#x.\n", hr);
bind_opts.dwTickCountDeadline = 2499; hr = IBindCtx_SetBindOptions(bindctx, &bind_opts); ok(hr == S_OK, "Failed to set bind options, hr %#x.\n", hr); hr = IMoniker_ParseDisplayName(moniker, bindctx, &container_moniker->IMoniker_iface, displayname, &eaten, &moniker2); -todo_wine ok(hr == (0x8bee0000 | BINDSPEED_IMMEDIATE), "Unexpected hr %#x.\n", hr);
bind_opts.dwTickCountDeadline = 2500; hr = IBindCtx_SetBindOptions(bindctx, &bind_opts); ok(hr == S_OK, "Failed to set bind options, hr %#x.\n", hr); hr = IMoniker_ParseDisplayName(moniker, bindctx, &container_moniker->IMoniker_iface, displayname, &eaten, &moniker2); -todo_wine ok(hr == (0x8bee0000 | BINDSPEED_MODERATE), "Unexpected hr %#x.\n", hr);
IMoniker_Release(&container_moniker->IMoniker_iface);