From 32bdd85b7fb342c61fc86efab54cb68bd0c59f03 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Mon, 20 Nov 2023 17:41:31 +0100 Subject: [PATCH] DisplayIcon needs to validate the result and support icon index (#5664) Test: @echo off reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex1 /v DisplayName /d "Ex1 Normal" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex1 /v DisplayIcon /d "%windir%\explorer.exe" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex1 /v UnstallString /d "calc.exe" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex2 /v DisplayName /d "Ex2 Bad icon path" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex2 /v DisplayIcon /d "%windir%\DoesNotExist.exe" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex2 /v UnstallString /d "calc.exe" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex3 /v DisplayName /d "Ex3 Resource index" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex3 /v DisplayIcon /d "%windir%\explorer.exe,4" /f reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ex3 /v UnstallString /d "calc.exe" /f start appwiz.cpl --- base/applications/rapps/appview.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/base/applications/rapps/appview.cpp b/base/applications/rapps/appview.cpp index 004e1623c3c..a34e9cd9cad 100644 --- a/base/applications/rapps/appview.cpp +++ b/base/applications/rapps/appview.cpp @@ -1289,14 +1289,13 @@ CAppsListView::AddApplication(CAppInfo *AppInfo, BOOL InitialCheckState) /* Load icon from registry */ HICON hIcon = NULL; CStringW szIconPath; + int IconIndex; if (AppInfo->RetrieveIcon(szIconPath)) { - PathParseIconLocationW((LPWSTR)szIconPath.GetString()); + IconIndex = PathParseIconLocationW(szIconPath.GetBuffer()); + szIconPath.ReleaseBuffer(); - /* Load only the 1st icon from the application executable, - * because all apps provide the executables which have the main icon - * as 1st in the index , so we don't need other icons here */ - hIcon = ExtractIconW(hInst, szIconPath.GetString(), 0); + ExtractIconExW(szIconPath.GetString(), IconIndex, &hIcon, NULL, 1); } /* Use the default icon if none were found in the file, or if it is not supported (returned 1) */ @@ -1306,7 +1305,7 @@ CAppsListView::AddApplication(CAppInfo *AppInfo, BOOL InitialCheckState) hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN)); } - int IconIndex = ImageList_AddIcon(m_hImageListView, hIcon); + IconIndex = ImageList_AddIcon(m_hImageListView, hIcon); DestroyIcon(hIcon); int Index = AddItem(ItemCount, IconIndex, AppInfo->szDisplayName, (LPARAM)AppInfo);