wine/dlls/dmloader loader.c

Alexandre Julliard julliard at wine.codeweavers.com
Tue Nov 8 04:56:13 CST 2005


ChangeSet ID:	21152
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/08 04:56:13

Modified files:
	dlls/dmloader  : loader.c 

Log message:
	Christian Costa <titan.costa at wanadoo.fr>
	Add some checks and fix some stream leaks.

Patch: http://cvs.winehq.org/patch.py?id=21152

Old revision  New revision  Changes     Path
 1.20          1.21          +40 -10     wine/dlls/dmloader/loader.c

Index: wine/dlls/dmloader/loader.c
diff -u -p wine/dlls/dmloader/loader.c:1.20 wine/dlls/dmloader/loader.c:1.21
--- wine/dlls/dmloader/loader.c:1.20	8 Nov 2005 10:56:13 -0000
+++ wine/dlls/dmloader/loader.c	8 Nov 2005 10:56:13 -0000
@@ -194,15 +194,15 @@ HRESULT WINAPI IDirectMusicLoaderImpl_ID
 		/* create stream and associate it with file */			
 		result = DMUSIC_CreateDirectMusicLoaderFileStream ((LPVOID*)&pStream);
 		if (FAILED(result)) {
-			ERR(": could not create loader stream\n");
+			ERR(": could not create file stream\n");
 			return result;
 		}
 		result = IDirectMusicLoaderFileStream_Attach (pStream, wszFileName, iface);
 		if (FAILED(result)) {
-			ERR(": could not attach stream to file\n");			
+			ERR(": could not attach stream to file\n");
+			IStream_Release (pStream);
 			return result;
 		}
-
 	}
 	else if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
 		/* load object from resource */
@@ -215,7 +215,8 @@ HRESULT WINAPI IDirectMusicLoaderImpl_ID
 		}
 		result = IDirectMusicLoaderResourceStream_Attach (pStream, pDesc->pbMemData, pDesc->llMemLength, 0, iface);
 		if (FAILED(result)) {
-			ERR(": could not attach stream to resource\n");			
+			ERR(": could not attach stream to resource\n");
+			IStream_Release (pStream);
 			return result;
 		}
 	}
@@ -231,6 +232,7 @@ HRESULT WINAPI IDirectMusicLoaderImpl_ID
 		result = IDirectMusicLoaderGenericStream_Attach (pStream, pDesc->pStream, iface);
 		if (FAILED(result)) {
 			ERR(": failed to attach stream\n");
+			IStream_Release (pStream);
 			return result;
 		}
 	} else {
@@ -323,6 +325,7 @@ HRESULT WINAPI IDirectMusicLoaderImpl_ID
 	DMUS_OBJECTDESC Desc;
 	struct list *pEntry;
 	LPWINE_LOADER_ENTRY pObjectEntry, pNewEntry;
+	HRESULT hr;
 
 	TRACE("(%p, %p): pDesc:\n%s\n", This, pDesc, debugstr_DMUS_OBJECTDESC(pDesc));
 
@@ -344,21 +347,48 @@ HRESULT WINAPI IDirectMusicLoaderImpl_ID
 			strcpyW(p, pDesc->wszFileName);
 		}
 		/* create stream */
-		DMUSIC_CreateDirectMusicLoaderFileStream ((LPVOID*)&pStream);
+		hr = DMUSIC_CreateDirectMusicLoaderFileStream ((LPVOID*)&pStream);
+		if (FAILED(hr)) {
+			ERR(": could not create file stream\n");
+			return DMUS_E_LOADER_FAILEDOPEN;
+		}
 		/* attach stream */
-		IDirectMusicLoaderFileStream_Attach (pStream, wszFileName, iface);
+		hr = IDirectMusicLoaderFileStream_Attach (pStream, wszFileName, iface);
+		if (FAILED(hr)) {
+			ERR(": could not attach stream to file\n");
+			IStream_Release (pStream);
+			return DMUS_E_LOADER_FAILEDOPEN;
+		}
 	}
 	else if (pDesc->dwValidData & DMUS_OBJ_STREAM) {	
 		/* create stream */
-		DMUSIC_CreateDirectMusicLoaderGenericStream ((LPVOID*)&pStream);
+		hr = DMUSIC_CreateDirectMusicLoaderGenericStream ((LPVOID*)&pStream);
+		if (FAILED(hr)) {
+			ERR(": could not create generic stream\n");
+			return DMUS_E_LOADER_FAILEDOPEN;
+		}
 		/* attach stream */
-		IDirectMusicLoaderGenericStream_Attach (pStream, pDesc->pStream, iface);
+		hr = IDirectMusicLoaderGenericStream_Attach (pStream, pDesc->pStream, iface);
+		if (FAILED(hr)) {
+			ERR(": could not attach stream\n");
+			IStream_Release (pStream);
+			return DMUS_E_LOADER_FAILEDOPEN;
+		}
 	}
 	else if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
 		/* create stream */
-		DMUSIC_CreateDirectMusicLoaderResourceStream ((LPVOID*)&pStream);
+		hr = DMUSIC_CreateDirectMusicLoaderResourceStream ((LPVOID*)&pStream);
+		if (FAILED(hr)) {
+			ERR(": could not create resource stream\n");
+			return DMUS_E_LOADER_FAILEDOPEN;
+		}
 		/* attach stream */
-		IDirectMusicLoaderResourceStream_Attach (pStream, pDesc->pbMemData, pDesc->llMemLength, 0, iface);
+		hr = IDirectMusicLoaderResourceStream_Attach (pStream, pDesc->pbMemData, pDesc->llMemLength, 0, iface);
+		if (FAILED(hr)) {
+			ERR(": could not attach stream to resource\n");
+			IStream_Release (pStream);
+			return DMUS_E_LOADER_FAILEDOPEN;
+		}
 	}
 	else {
 		ERR(": no way to get additional info\n");



More information about the wine-cvs mailing list