Module: wine Branch: master Commit: 93a155381fe3dbba61ac7e367e060cdf7f873bf8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=93a155381fe3dbba61ac7e367e...
Author: Vincent Povirk vincent@codeweavers.com Date: Fri May 29 16:40:15 2009 -0500
ole32: Fix crash when calling CreateStorage on read only storage.
---
dlls/ole32/storage32.c | 3 ++- dlls/ole32/tests/storage32.c | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index d68f09f..9f3930e 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -1230,7 +1230,8 @@ static HRESULT WINAPI StorageImpl_CreateStorage( /* * An element with this name already exists */ - if (STGM_CREATE_MODE(grfMode) == STGM_CREATE) + if (STGM_CREATE_MODE(grfMode) == STGM_CREATE && + STGM_ACCESS_MODE(This->base.openFlags) != STGM_READ) IStorage_DestroyElement(iface, pwcsName); else { diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index f932765..84c4b0f 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -1314,13 +1314,11 @@ void test_readonly(void) if (SUCCEEDED(hr)) IStream_Release(stream);
-#if 0 /* crashes on Wine */ /* CreateStorage on read-only storage, name exists */ hr = IStorage_CreateStorage( stg2, streamW, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READ, 0, 0, &stg3 ); ok(hr == STG_E_FILEALREADYEXISTS, "should fail, res=%x\n", hr); if (SUCCEEDED(hr)) IStream_Release(stg3); -#endif
/* CreateStorage on read-only storage, name does not exist */ hr = IStorage_CreateStorage( stg2, storageW, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READ, 0, 0, &stg3 );