From 1b2ac0b108940ca7662707e90ac5f0256efe7cc8 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Fri, 29 May 2009 16:30:56 -0500 Subject: [PATCH] ole32: fix crash when calling CreateStream on read only storage --- dlls/ole32/storage32.c | 4 ++++ dlls/ole32/tests/storage32.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 748eac8..d68f09f 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -979,6 +979,10 @@ static HRESULT WINAPI StorageBaseImpl_CreateStream( (grfMode & STGM_TRANSACTED)) return STG_E_INVALIDFUNCTION; + /* Can't create a stream on read-only storage */ + if ( STGM_ACCESS_MODE( This->openFlags ) == STGM_READ ) + return STG_E_ACCESSDENIED; + /* * Check that we're compatible with the parent's storage mode * if not in transacted mode diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index 7d4fb30..f932765 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -1302,13 +1302,11 @@ void test_readonly(void) ok(hr == S_OK, "should succeed, res=%x\n", hr); if (SUCCEEDED(hr)) { -#if 0 /* crashes on Wine */ /* CreateStream on read-only storage, name exists */ hr = IStorage_CreateStream( stg2, streamW, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READ, 0, 0, &stream ); ok(hr == STG_E_ACCESSDENIED, "should fail, res=%x\n", hr); if (SUCCEEDED(hr)) IStream_Release(stream); -#endif /* CreateStream on read-only storage, name does not exist */ hr = IStorage_CreateStream( stg2, storageW, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READ, 0, 0, &stream ); -- 1.5.4.3