[PATCH] dmloader: Release objects on error paths (Coverity)
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Mon Dec 16 04:18:06 CST 2019
CID: 1448587
CID: 1449363
CID: 1448601
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/dmloader/loader.c | 12 ++++++++++++
dlls/dmloader/loaderstream.c | 1 +
2 files changed, 13 insertions(+)
diff --git a/dlls/dmloader/loader.c b/dlls/dmloader/loader.c
index cd7f6ff7ee3..2af4de9fc80 100644
--- a/dlls/dmloader/loader.c
+++ b/dlls/dmloader/loader.c
@@ -383,18 +383,24 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_GetObject(IDirectMusicLoader8 *ifac
/* create object */
result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
if (FAILED(result)) {
+ IStream_Release (pStream);
ERR(": could not create object\n");
return result;
}
/* acquire PersistStream interface */
result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*)&pPersistStream);
if (FAILED(result)) {
+ IStream_Release (pStream);
+ IDirectMusicObject_Release (pObject);
ERR("failed to Query\n");
return result;
}
/* load */
result = IPersistStream_Load (pPersistStream, pStream);
if (result != S_OK) {
+ IStream_Release (pStream);
+ IPersistStream_Release (pPersistStream);
+ IDirectMusicObject_Release (pObject);
WARN(": failed to (completely) load object (%08x)\n", result);
return result;
}
@@ -407,6 +413,9 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_GetObject(IDirectMusicLoader8 *ifac
lstrcpyW (GotDesc.wszFileName, pDesc->wszFileName);
}
if (FAILED(result)) {
+ IStream_Release (pStream);
+ IPersistStream_Release (pPersistStream);
+ IDirectMusicObject_Release (pObject);
ERR(": failed to get descriptor\n");
return result;
}
@@ -523,6 +532,7 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_SetObject(IDirectMusicLoader8 *ifac
/* create object */
hr = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
if (FAILED(hr)) {
+ IStream_Release (pStream);
ERR("Object creation of %s failed 0x%08x\n", debugstr_guid(&pDesc->guidClass),hr);
return DMUS_E_LOADER_FAILEDOPEN;
}
@@ -536,6 +546,8 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_SetObject(IDirectMusicLoader8 *ifac
/* hmph... due to some trouble I had with certain tests, we store current position and then set it back */
DM_STRUCT_INIT(&Desc);
if (FAILED(IDirectMusicObject_ParseDescriptor (pObject, pStream, &Desc))) {
+ IStream_Release (pStream);
+ IDirectMusicObject_Release (pObject);
ERR(": couldn't parse descriptor\n");
return DMUS_E_LOADER_FORMATNOTSUPPORTED;
}
diff --git a/dlls/dmloader/loaderstream.c b/dlls/dmloader/loaderstream.c
index 855203ec3e8..b306672771f 100644
--- a/dlls/dmloader/loaderstream.c
+++ b/dlls/dmloader/loaderstream.c
@@ -665,6 +665,7 @@ static HRESULT WINAPI IDirectMusicLoaderGenericStream_IStream_Clone (LPSTREAM if
if (FAILED(result)) return result;
if (FAILED(IStream_Clone (This->pStream, &pLowLevel)))
+ IStream_Release(pOther);
return E_FAIL;
IDirectMusicLoaderGenericStream_Attach (pOther, pLowLevel, This->pLoader);
--
2.24.0
More information about the wine-devel
mailing list