David Hedberg : ole32: OleLoad should not fail even if IOleObject:: GetMiscStatus fails.

Alexandre Julliard julliard at winehq.org
Mon Oct 18 13:36:54 CDT 2010


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

Author: David Hedberg <dhedberg at codeweavers.com>
Date:   Mon Oct 18 04:19:23 2010 +0200

ole32: OleLoad should not fail even if IOleObject::GetMiscStatus fails.

---

 dlls/ole32/ole2.c       |   13 ++++++-------
 dlls/ole32/tests/ole2.c |   40 ++++++++++++++++++++++++++++++++++++++--
 2 files changed, 44 insertions(+), 9 deletions(-)

diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 03cb7f0..ca4cd4c 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -1181,13 +1181,12 @@ HRESULT WINAPI OleLoad(
     }
   }
 
-  if (SUCCEEDED(hres))
-    /*
-     * Initialize the object with it's IPersistStorage interface.
-     */
-    hres = IOleObject_QueryInterface(pUnk,
-				     &IID_IPersistStorage,
-				     (void**)&persistStorage);
+  /*
+   * Initialize the object with its IPersistStorage interface.
+   */
+  hres = IOleObject_QueryInterface(pUnk,
+                                   &IID_IPersistStorage,
+                                   (void**)&persistStorage);
 
   if (SUCCEEDED(hres))
   {
diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c
index cd83a3b..d8c2bab 100644
--- a/dlls/ole32/tests/ole2.c
+++ b/dlls/ole32/tests/ole2.c
@@ -57,6 +57,7 @@ static FORMATETC *g_expected_fetc = NULL;
 
 static BOOL g_showRunnable = TRUE;
 static BOOL g_isRunning = TRUE;
+static BOOL g_failGetMiscStatus;
 
 #define CHECK_EXPECTED_METHOD(method_name) \
     do { \
@@ -328,8 +329,16 @@ static HRESULT WINAPI OleObject_GetMiscStatus
 )
 {
     CHECK_EXPECTED_METHOD("OleObject_GetMiscStatus");
-    *pdwStatus = DVASPECT_CONTENT;
-    return S_OK;
+    if(!g_failGetMiscStatus)
+    {
+        *pdwStatus = OLEMISC_RECOMPOSEONRESIZE;
+        return S_OK;
+    }
+    else
+    {
+        *pdwStatus = 0x1234;
+        return E_FAIL;
+    }
 }
 
 static HRESULT WINAPI OleObject_SetColorScheme
@@ -899,10 +908,32 @@ static void test_OleLoad(IStorage *pStorage)
         { "OleObject_SetClientSite", 0 },
         { "OleObject_Release", 0 },
         { "OleObject_QueryInterface", 0 },
+        { "OleObject_GetMiscStatus", 0 },
         { "OleObject_Release", 0 },
         { NULL, 0 }
     };
 
+    /* Test once with IOleObject_GetMiscStatus failing */
+    expected_method_list = methods_oleload;
+    g_failGetMiscStatus = TRUE;
+    trace("OleLoad:\n");
+    hr = OleLoad(pStorage, &IID_IOleObject, (IOleClientSite *)0xdeadbeef, (void **)&pObject);
+    ok(hr == S_OK ||
+       broken(hr == E_INVALIDARG), /* win98 and win2k */
+       "OleLoad failed with error 0x%08x\n", hr);
+    if(pObject)
+    {
+        DWORD dwStatus = 0xdeadbeef;
+        hr = IOleObject_GetMiscStatus(pObject, DVASPECT_CONTENT, &dwStatus);
+        ok(hr == E_FAIL, "Got 0x%08x\n", hr);
+        ok(dwStatus == 0x1234, "Got 0x%08x\n", dwStatus);
+
+        IOleObject_Release(pObject);
+        CHECK_NO_EXTRA_METHODS();
+    }
+
+    /* Test again, let IOleObject_GetMiscStatus succeed. */
+    g_failGetMiscStatus = FALSE;
     expected_method_list = methods_oleload;
     trace("OleLoad:\n");
     hr = OleLoad(pStorage, &IID_IOleObject, (IOleClientSite *)0xdeadbeef, (void **)&pObject);
@@ -911,6 +942,11 @@ static void test_OleLoad(IStorage *pStorage)
        "OleLoad failed with error 0x%08x\n", hr);
     if (pObject)
     {
+        DWORD dwStatus = 0xdeadbeef;
+        hr = IOleObject_GetMiscStatus(pObject, DVASPECT_CONTENT, &dwStatus);
+        ok(hr == S_OK, "Got 0x%08x\n", hr);
+        ok(dwStatus == 1, "Got 0x%08x\n", dwStatus);
+
         IOleObject_Release(pObject);
         CHECK_NO_EXTRA_METHODS();
     }




More information about the wine-cvs mailing list