From ce5f487a313b1a5a9931de883ad45bd4eef42be8 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Fri, 18 Dec 2009 19:16:02 -0600 Subject: [PATCH 2/3] ole32: Make IEnumSTATSTG functions fail when the parent is invalid. --- dlls/ole32/storage32.c | 12 ++++++++++++ dlls/ole32/tests/storage32.c | 2 -- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 7d267b6..e21acf1 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -4513,6 +4513,9 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Next( if ( (rgelt==0) || ( (celt!=1) && (pceltFetched==0) ) ) return E_INVALIDARG; + if (This->parentStorage->reverted) + return STG_E_REVERTED; + /* * To avoid the special case, get another pointer to a ULONG value if * the caller didn't supply one. @@ -4588,6 +4591,9 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Skip( ULONG objectFetched = 0; DirRef currentSearchNode; + if (This->parentStorage->reverted) + return STG_E_REVERTED; + /* * Start with the node at the top of the stack. */ @@ -4638,6 +4644,9 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Reset( DirEntry storageEntry; HRESULT hr; + if (This->parentStorage->reverted) + return STG_E_REVERTED; + /* * Re-initialize the search stack to an empty stack */ @@ -4672,6 +4681,9 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Clone( IEnumSTATSTGImpl* newClone; + if (This->parentStorage->reverted) + return STG_E_REVERTED; + /* * Perform a sanity check on the parameters. */ diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c index 006469c..4199d5f 100644 --- a/dlls/ole32/tests/storage32.c +++ b/dlls/ole32/tests/storage32.c @@ -2694,10 +2694,8 @@ static void test_substorage_enum(void) r = IStorage_DestroyElement(stg, stgname); ok(r==S_OK, "IStorage->CreateStorage failed, hr=%08x\n", r); -if (0) { /* crashes on wine */ r = IEnumSTATSTG_Reset(ee); ok(r==STG_E_REVERTED, "IEnumSTATSTG->Reset failed, hr=%08x\n", r); -} IEnumSTATSTG_Release(ee); -- 1.6.3.3