From a5b76eb77915b5bea33c59b87a439c2bb9cc1d27 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 12 Jul 2016 23:00:50 +0000 Subject: [PATCH] [SHELL32] - Use StringCbCopyW [PROGMAN] - Use StringCbCopyW: CID #1363712. - Don't read registry values in a registry key if we failed to open it. CID #514350. svn path=/trunk/; revision=71912 --- reactos/base/shell/progman/dialog.c | 64 ++++++++++--------- reactos/dll/win32/shell32/dialogs/dialogs.cpp | 2 +- 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/reactos/base/shell/progman/dialog.c b/reactos/base/shell/progman/dialog.c index 526efb0f5f0..faf2f9114a2 100644 --- a/reactos/base/shell/progman/dialog.c +++ b/reactos/base/shell/progman/dialog.c @@ -516,7 +516,7 @@ EnumPickIconResourceProc(HMODULE hModule, LPCWSTR lpszType, LPWSTR lpszName, LON if (IS_INTRESOURCE(lpszName)) swprintf(szName, L"%u", lpszName); else - wcscpy(szName, lpszName); + StringCbCopyW(szName, sizeof(szName), lpszName); hIcon = (HICON)LoadImageW(hModule, lpszName, IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR); if (hIcon == NULL) @@ -1026,6 +1026,9 @@ VOID DIALOG_Execute(VOID) DWORD dwSize; DWORD dwType; + ExecuteContext.hKeyPMRecentFilesList = NULL; + ExecuteContext.bCheckBinaryType = TRUE; + lRet = RegCreateKeyExW(Globals.hKeyProgMan, L"Recent File List", 0, @@ -1035,39 +1038,42 @@ VOID DIALOG_Execute(VOID) NULL, &ExecuteContext.hKeyPMRecentFilesList, NULL); - - dwSize = sizeof(ExecuteContext.dwMaxFiles); - lRet = RegQueryValueExW(ExecuteContext.hKeyPMRecentFilesList, - L"Max Files", - NULL, - &dwType, - (LPBYTE)&ExecuteContext.dwMaxFiles, - &dwSize); - if (lRet != ERROR_SUCCESS || dwType != REG_DWORD) + if (lRet == ERROR_SUCCESS) { - ExecuteContext.dwMaxFiles = 4; dwSize = sizeof(ExecuteContext.dwMaxFiles); - lRet = RegSetValueExW(ExecuteContext.hKeyPMRecentFilesList, - L"Max Files", - 0, - REG_DWORD, - (LPBYTE)&ExecuteContext.dwMaxFiles, - sizeof(ExecuteContext.dwMaxFiles)); - } + lRet = RegQueryValueExW(ExecuteContext.hKeyPMRecentFilesList, + L"Max Files", + NULL, + &dwType, + (LPBYTE)&ExecuteContext.dwMaxFiles, + &dwSize); + if (lRet != ERROR_SUCCESS || dwType != REG_DWORD) + { + ExecuteContext.dwMaxFiles = 4; + dwSize = sizeof(ExecuteContext.dwMaxFiles); + lRet = RegSetValueExW(ExecuteContext.hKeyPMRecentFilesList, + L"Max Files", + 0, + REG_DWORD, + (LPBYTE)&ExecuteContext.dwMaxFiles, + sizeof(ExecuteContext.dwMaxFiles)); + } - dwSize = sizeof(ExecuteContext.bCheckBinaryType); - lRet = RegQueryValueExW(Globals.hKeyPMSettings, - L"CheckBinaryType", - NULL, - &dwType, - (LPBYTE)&ExecuteContext.bCheckBinaryType, - &dwSize); - if (lRet != ERROR_SUCCESS || dwType != REG_DWORD) - { - ExecuteContext.bCheckBinaryType = TRUE; + dwSize = sizeof(ExecuteContext.bCheckBinaryType); + lRet = RegQueryValueExW(Globals.hKeyPMSettings, + L"CheckBinaryType", + NULL, + &dwType, + (LPBYTE)&ExecuteContext.bCheckBinaryType, + &dwSize); + if (lRet != ERROR_SUCCESS || dwType != REG_DWORD) + { + ExecuteContext.bCheckBinaryType = TRUE; + } } DialogBoxParamW(Globals.hInstance, MAKEINTRESOURCEW(IDD_EXECUTE), Globals.hMainWnd, DIALOG_EXECUTE_DlgProc, (LPARAM)&ExecuteContext); - RegCloseKey(ExecuteContext.hKeyPMRecentFilesList); + if (ExecuteContext.hKeyPMRecentFilesList) + RegCloseKey(ExecuteContext.hKeyPMRecentFilesList); } diff --git a/reactos/dll/win32/shell32/dialogs/dialogs.cpp b/reactos/dll/win32/shell32/dialogs/dialogs.cpp index 077d28ef50a..557e4bce3d1 100644 --- a/reactos/dll/win32/shell32/dialogs/dialogs.cpp +++ b/reactos/dll/win32/shell32/dialogs/dialogs.cpp @@ -64,7 +64,7 @@ BOOL CALLBACK EnumPickIconResourceProc(HMODULE hModule, if (IS_INTRESOURCE(lpszName)) swprintf(szName, L"%u", (DWORD)lpszName); else - wcscpy(szName, (WCHAR*)lpszName); + StringCbCopyW(szName, sizeof(szName), lpszName); hIcon = LoadIconW(hModule, lpszName); if (hIcon == NULL) -- 2.17.1