[PATCH 1/3] shell32: Avoid leaking icon handles.

Huw Davies huw at codeweavers.com
Wed Apr 19 07:13:39 CDT 2017


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/shell32/iconcache.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/dlls/shell32/iconcache.c b/dlls/shell32/iconcache.c
index c3284a27d6..7beb47967d 100644
--- a/dlls/shell32/iconcache.c
+++ b/dlls/shell32/iconcache.c
@@ -305,10 +305,12 @@ static INT SIC_IconAppend (LPCWSTR sSourceFile, INT dwSourceIndex, HICON hSmallI
  *  gets small/big icon by number from a file
  */
 static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags)
-{	HICON	hiconLarge=0;
+{
+	HICON	hiconLarge=0;
 	HICON	hiconSmall=0;
 	HICON 	hiconLargeShortcut;
 	HICON	hiconSmallShortcut;
+        int ret;
 
         PrivateExtractIconsW( sSourceFile, dwSourceIndex, GetSystemMetrics(SM_CXICON),
                               GetSystemMetrics(SM_CYICON), &hiconLarge, 0, 1, 0 );
@@ -327,6 +329,8 @@ static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags)
 	  hiconSmallShortcut = SIC_OverlayShortcutImage(hiconSmall, FALSE);
 	  if (NULL != hiconLargeShortcut && NULL != hiconSmallShortcut)
 	  {
+            DestroyIcon( hiconLarge );
+            DestroyIcon( hiconSmall );
 	    hiconLarge = hiconLargeShortcut;
 	    hiconSmall = hiconSmallShortcut;
 	  }
@@ -339,8 +343,12 @@ static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags)
 	  }
 	}
 
-	return SIC_IconAppend (sSourceFile, dwSourceIndex, hiconSmall, hiconLarge, dwFlags);
+        ret = SIC_IconAppend( sSourceFile, dwSourceIndex, hiconSmall, hiconLarge, dwFlags );
+        DestroyIcon( hiconLarge );
+        DestroyIcon( hiconSmall );
+        return ret;
 }
+
 /*****************************************************************************
  * SIC_Initialize			[internal]
  */
-- 
2.12.0




More information about the wine-patches mailing list