Nikolay Sivov : ole32: Handle GetObject() failure in ParseDisplayName() for item moniker.

Alexandre Julliard julliard at winehq.org
Thu Jan 23 15:48:49 CST 2020


Module: wine
Branch: master
Commit: dee2fd11479a0c2cab1ed4267abab1507b6eb017
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=dee2fd11479a0c2cab1ed4267abab1507b6eb017

Author: Nikolay Sivov <nsivov at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);




More information about the wine-cvs mailing list