shell32.iconcache.c: Fix two memory leaks

Rolf Kalbermatter rolf.kalbermatter at citeng.com
Fri Nov 28 02:12:55 CST 2003


Changelog
  dlls/shell32/iconcache.c
    Fix two memory leaks. Found by Dietrich Teickner from Odin.

Rolf Kalbermatter

Index: dlls/shell32/iconcache.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/iconcache.c,v
retrieving revision 1.69
diff -u -r1.69 iconcache.c
--- dlls/shell32/iconcache.c	17 Sep 2003 20:15:21 -0000	1.69
+++ dlls/shell32/iconcache.c	28 Nov 2003 08:06:59 -0000
@@ -91,7 +91,7 @@
  * SIC_IconAppend			[internal]
  *
  * NOTES
- *  appends a icon pair to the end of the cache
+ *  appends an icon pair to the end of the cache
  */
 static INT SIC_IconAppend (LPCSTR sSourceFile, INT dwSourceIndex, HICON hSmallIcon, HICON hBigIcon)
 {	LPSIC_ENTRY lpsice;
@@ -101,9 +101,9 @@
 
 	lpsice = (LPSIC_ENTRY) SHAlloc (sizeof (SIC_ENTRY));
 
-        path = PathFindFileNameA(sSourceFile);
-        lpsice->sSourceFile = HeapAlloc( GetProcessHeap(), 0, strlen(path)+1 );
-        strcpy( lpsice->sSourceFile, path );
+	path = PathFindFileNameA(sSourceFile);
+	lpsice->sSourceFile = HeapAlloc( GetProcessHeap(), 0, strlen(path)+1 );
+	strcpy( lpsice->sSourceFile, path );
 
 	lpsice->dwSourceIndex = dwSourceIndex;
 
@@ -112,6 +112,7 @@
 	index = DPA_InsertPtr(sic_hdpa, 0x7fff, lpsice);
 	if ( INVALID_INDEX == index )
 	{
+	  HeapFree(GetProcessHeap(), 0, lpsice->sSourceFile);
 	  SHFree(lpsice);
 	  ret = INVALID_INDEX;
 	}
@@ -269,8 +270,9 @@
  */
 static INT CALLBACK sic_free( LPVOID ptr, LPVOID lparam )
 {
-    SHFree(ptr);
-    return TRUE;
+	HeapFree(GetProcessHeap(), 0, (LPSIC_ENTRY)ptr->sSourceFile);
+	SHFree(ptr);
+	return TRUE;
 }
 
 void SIC_Destroy(void)





More information about the wine-patches mailing list