Module: wine Branch: master Commit: 3ac34f7416ff660a62abacee9d9bff7cc72d5339 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3ac34f7416ff660a62abacee9d...
Author: Vincent Povirk vincent@codeweavers.com Date: Sun Dec 13 18:30:35 2009 -0600
ole32: Properly free temporary objects when StorageBaseImpl_CopyTo fails.
---
dlls/ole32/storage32.c | 51 ++++++++++++++++++++++++----------------------- 1 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 2d2c3d6..90d2434 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -1690,17 +1690,17 @@ static HRESULT WINAPI StorageBaseImpl_CopyTo( NULL, 0, &pstgTmp ); }
- if (hr != S_OK) - goto cleanup; - + if (hr == S_OK) + { + /* + * do the copy recursively + */ + hr = IStorage_CopyTo( pstgChild, ciidExclude, rgiidExclude, + NULL, pstgTmp );
- /* - * do the copy recursively - */ - hr = IStorage_CopyTo( pstgChild, ciidExclude, rgiidExclude, - NULL, pstgTmp ); + IStorage_Release( pstgTmp ); + }
- IStorage_Release( pstgTmp ); IStorage_Release( pstgChild ); } else if (curElement.type == STGTY_STREAM) @@ -1726,27 +1726,28 @@ static HRESULT WINAPI StorageBaseImpl_CopyTo( STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &pstrChild );
- if (hr != S_OK) - goto cleanup; + if (hr == S_OK) + { + /* + * Get the size of the source stream + */ + IStream_Stat( pstrChild, &strStat, STATFLAG_NONAME );
- /* - * Get the size of the source stream - */ - IStream_Stat( pstrChild, &strStat, STATFLAG_NONAME ); + /* + * Set the size of the destination stream. + */ + IStream_SetSize(pstrTmp, strStat.cbSize);
- /* - * Set the size of the destination stream. - */ - IStream_SetSize(pstrTmp, strStat.cbSize); + /* + * do the copy + */ + hr = IStream_CopyTo( pstrChild, pstrTmp, strStat.cbSize, + NULL, NULL );
- /* - * do the copy - */ - hr = IStream_CopyTo( pstrChild, pstrTmp, strStat.cbSize, - NULL, NULL ); + IStream_Release( pstrChild ); + }
IStream_Release( pstrTmp ); - IStream_Release( pstrChild ); } else {