forked from Mirrors/wine-wine
dmloader: Release objects on error paths (Coverity).
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com> Signed-off-by: Michael Stefaniuc <mstefani@winehq.org> Signed-off-by: Alexandre Julliard <julliard@winehq.org>stable
parent
3d62a461d0
commit
6e986bbd81
|
@ -384,18 +384,24 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_GetObject(IDirectMusicLoader8 *ifac
|
||||||
/* create object */
|
/* create object */
|
||||||
result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
|
result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
|
||||||
if (FAILED(result)) {
|
if (FAILED(result)) {
|
||||||
|
IStream_Release(pStream);
|
||||||
ERR(": could not create object\n");
|
ERR(": could not create object\n");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
/* acquire PersistStream interface */
|
/* acquire PersistStream interface */
|
||||||
result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*)&pPersistStream);
|
result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*)&pPersistStream);
|
||||||
if (FAILED(result)) {
|
if (FAILED(result)) {
|
||||||
|
IStream_Release(pStream);
|
||||||
|
IDirectMusicObject_Release(pObject);
|
||||||
ERR("failed to Query\n");
|
ERR("failed to Query\n");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
/* load */
|
/* load */
|
||||||
result = IPersistStream_Load (pPersistStream, pStream);
|
result = IPersistStream_Load (pPersistStream, pStream);
|
||||||
if (result != S_OK) {
|
if (result != S_OK) {
|
||||||
|
IStream_Release(pStream);
|
||||||
|
IPersistStream_Release(pPersistStream);
|
||||||
|
IDirectMusicObject_Release(pObject);
|
||||||
WARN(": failed to (completely) load object (%08x)\n", result);
|
WARN(": failed to (completely) load object (%08x)\n", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -408,6 +414,9 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_GetObject(IDirectMusicLoader8 *ifac
|
||||||
lstrcpyW (GotDesc.wszFileName, pDesc->wszFileName);
|
lstrcpyW (GotDesc.wszFileName, pDesc->wszFileName);
|
||||||
}
|
}
|
||||||
if (FAILED(result)) {
|
if (FAILED(result)) {
|
||||||
|
IStream_Release(pStream);
|
||||||
|
IPersistStream_Release(pPersistStream);
|
||||||
|
IDirectMusicObject_Release(pObject);
|
||||||
ERR(": failed to get descriptor\n");
|
ERR(": failed to get descriptor\n");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -524,6 +533,7 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_SetObject(IDirectMusicLoader8 *ifac
|
||||||
/* create object */
|
/* create object */
|
||||||
hr = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
|
hr = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
|
IStream_Release(pStream);
|
||||||
ERR("Object creation of %s failed 0x%08x\n", debugstr_guid(&pDesc->guidClass),hr);
|
ERR("Object creation of %s failed 0x%08x\n", debugstr_guid(&pDesc->guidClass),hr);
|
||||||
return DMUS_E_LOADER_FAILEDOPEN;
|
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 */
|
/* hmph... due to some trouble I had with certain tests, we store current position and then set it back */
|
||||||
DM_STRUCT_INIT(&Desc);
|
DM_STRUCT_INIT(&Desc);
|
||||||
if (FAILED(IDirectMusicObject_ParseDescriptor (pObject, pStream, &Desc))) {
|
if (FAILED(IDirectMusicObject_ParseDescriptor (pObject, pStream, &Desc))) {
|
||||||
|
IStream_Release(pStream);
|
||||||
|
IDirectMusicObject_Release(pObject);
|
||||||
ERR(": couldn't parse descriptor\n");
|
ERR(": couldn't parse descriptor\n");
|
||||||
return DMUS_E_LOADER_FORMATNOTSUPPORTED;
|
return DMUS_E_LOADER_FORMATNOTSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -663,10 +663,11 @@ static HRESULT WINAPI IDirectMusicLoaderGenericStream_IStream_Clone (LPSTREAM if
|
||||||
TRACE("(%p, %p)\n", iface, ppstm);
|
TRACE("(%p, %p)\n", iface, ppstm);
|
||||||
result = DMUSIC_CreateDirectMusicLoaderGenericStream ((LPVOID*)&pOther);
|
result = DMUSIC_CreateDirectMusicLoaderGenericStream ((LPVOID*)&pOther);
|
||||||
if (FAILED(result)) return result;
|
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;
|
return E_FAIL;
|
||||||
|
}
|
||||||
IDirectMusicLoaderGenericStream_Attach (pOther, pLowLevel, This->pLoader);
|
IDirectMusicLoaderGenericStream_Attach (pOther, pLowLevel, This->pLoader);
|
||||||
|
|
||||||
TRACE(": succeeded\n");
|
TRACE(": succeeded\n");
|
||||||
|
|
Loading…
Reference in New Issue