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

This commit is contained in:
David Hedberg 2010-10-18 04:19:23 +02:00 committed by Alexandre Julliard
parent 1f437a9349
commit d95e2dbd62
2 changed files with 44 additions and 9 deletions

View File

@ -1181,13 +1181,12 @@ HRESULT WINAPI OleLoad(
} }
} }
if (SUCCEEDED(hres)) /*
/* * Initialize the object with its IPersistStorage interface.
* Initialize the object with it's IPersistStorage interface. */
*/ hres = IOleObject_QueryInterface(pUnk,
hres = IOleObject_QueryInterface(pUnk, &IID_IPersistStorage,
&IID_IPersistStorage, (void**)&persistStorage);
(void**)&persistStorage);
if (SUCCEEDED(hres)) if (SUCCEEDED(hres))
{ {

View File

@ -57,6 +57,7 @@ static FORMATETC *g_expected_fetc = NULL;
static BOOL g_showRunnable = TRUE; static BOOL g_showRunnable = TRUE;
static BOOL g_isRunning = TRUE; static BOOL g_isRunning = TRUE;
static BOOL g_failGetMiscStatus;
#define CHECK_EXPECTED_METHOD(method_name) \ #define CHECK_EXPECTED_METHOD(method_name) \
do { \ do { \
@ -328,8 +329,16 @@ static HRESULT WINAPI OleObject_GetMiscStatus
) )
{ {
CHECK_EXPECTED_METHOD("OleObject_GetMiscStatus"); CHECK_EXPECTED_METHOD("OleObject_GetMiscStatus");
*pdwStatus = DVASPECT_CONTENT; if(!g_failGetMiscStatus)
return S_OK; {
*pdwStatus = OLEMISC_RECOMPOSEONRESIZE;
return S_OK;
}
else
{
*pdwStatus = 0x1234;
return E_FAIL;
}
} }
static HRESULT WINAPI OleObject_SetColorScheme static HRESULT WINAPI OleObject_SetColorScheme
@ -899,10 +908,32 @@ static void test_OleLoad(IStorage *pStorage)
{ "OleObject_SetClientSite", 0 }, { "OleObject_SetClientSite", 0 },
{ "OleObject_Release", 0 }, { "OleObject_Release", 0 },
{ "OleObject_QueryInterface", 0 }, { "OleObject_QueryInterface", 0 },
{ "OleObject_GetMiscStatus", 0 },
{ "OleObject_Release", 0 }, { "OleObject_Release", 0 },
{ NULL, 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; expected_method_list = methods_oleload;
trace("OleLoad:\n"); trace("OleLoad:\n");
hr = OleLoad(pStorage, &IID_IOleObject, (IOleClientSite *)0xdeadbeef, (void **)&pObject); 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); "OleLoad failed with error 0x%08x\n", hr);
if (pObject) 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); IOleObject_Release(pObject);
CHECK_NO_EXTRA_METHODS(); CHECK_NO_EXTRA_METHODS();
} }