ole32: OleLoad should not fail even if IOleObject::GetMiscStatus fails.
David Hedberg
dhedberg at codeweavers.com
Sun Oct 17 21:19:23 CDT 2010
---
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 0829ca1..a92b074 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 it's 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();
}
--
1.7.3.1
More information about the wine-patches
mailing list