Alistair Leslie-Hughes : dmloader: Release objects on error paths (Coverity).

Alexandre Julliard julliard at winehq.org
Mon Dec 16 16:47:55 CST 2019


Module: wine
Branch: master
Commit: 6e986bbd810890339569f82aca39273e41427f24
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=6e986bbd810890339569f82aca39273e41427f24

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Mon Dec 16 20:49:38 2019 +0100

dmloader: Release objects on error paths (Coverity).

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dmloader/loader.c       | 12 ++++++++++++
 dlls/dmloader/loaderstream.c |  7 ++++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/dlls/dmloader/loader.c b/dlls/dmloader/loader.c
index a267d2d6b2..51eeb57879 100644
--- a/dlls/dmloader/loader.c
+++ b/dlls/dmloader/loader.c
@@ -384,18 +384,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;
 	}
@@ -408,6 +414,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;
 	}
@@ -524,6 +533,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;
         }
@@ -537,6 +547,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 855203ec3e..150a53524a 100644
--- a/dlls/dmloader/loaderstream.c
+++ b/dlls/dmloader/loaderstream.c
@@ -663,10 +663,11 @@ static HRESULT WINAPI IDirectMusicLoaderGenericStream_IStream_Clone (LPSTREAM if
 	TRACE("(%p, %p)\n", iface, ppstm);
 	result = DMUSIC_CreateDirectMusicLoaderGenericStream ((LPVOID*)&pOther);
 	if (FAILED(result)) return result;
-	
-	if (FAILED(IStream_Clone (This->pStream, &pLowLevel)))
+
+	if (FAILED(IStream_Clone (This->pStream, &pLowLevel))) {
+		IStream_Release(pOther);
 		return E_FAIL;
-	
+	}
 	IDirectMusicLoaderGenericStream_Attach (pOther, pLowLevel, This->pLoader);
 
 	TRACE(": succeeded\n");




More information about the wine-cvs mailing list