https://git.reactos.org/?p=reactos.git;a=commitdiff;h=059ba9b0c037e76270aa8…
commit 059ba9b0c037e76270aa888828cf3355426a7586
Author: Stanislav Motylkov <x86corez(a)gmail.com>
AuthorDate: Fri Nov 20 21:16:37 2020 +0300
Commit: Stanislav Motylkov <x86corez(a)gmail.com>
CommitDate: Fri Nov 20 21:30:29 2020 +0300
[RAPPS] Properly use FormatMessageW with WinInet message table
Addendum to fb1582d. CORE-17375 CORE-17377
---
base/applications/rapps/loaddlg.cpp | 47 +++++++++++++++++++++++--------------
1 file changed, 29 insertions(+), 18 deletions(-)
diff --git a/base/applications/rapps/loaddlg.cpp b/base/applications/rapps/loaddlg.cpp
index 7ad7de1d32f..fb060358e55 100644
--- a/base/applications/rapps/loaddlg.cpp
+++ b/base/applications/rapps/loaddlg.cpp
@@ -522,25 +522,28 @@ VOID CDownloadManager::UpdateProgress(
}
}
-VOID ShowLastError(
+BOOL ShowLastError(
HWND hWndOwner,
+ BOOL bInetError,
DWORD dwLastError)
{
CLocalPtr<WCHAR> lpMsg;
if (!FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
+ FORMAT_MESSAGE_IGNORE_INSERTS |
+ (bInetError ? FORMAT_MESSAGE_FROM_HMODULE :
FORMAT_MESSAGE_FROM_SYSTEM),
+ (bInetError ? GetModuleHandleW(L"wininet.dll") :
NULL),
dwLastError,
LANG_USER_DEFAULT,
(LPWSTR)&lpMsg,
0, NULL))
{
- return;
+ DPRINT1("FormatMessageW unexpected failure (err %d)\n",
GetLastError());
+ return FALSE;
}
MessageBoxW(hWndOwner, lpMsg, NULL, MB_OK | MB_ICONERROR);
+ return TRUE;
}
unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
@@ -596,7 +599,7 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
{
if (!GetStorageDirectory(Path))
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, FALSE, GetLastError());
goto end;
}
}
@@ -646,7 +649,7 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
{
if (!CreateDirectoryW(Path.GetString(), NULL))
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, FALSE, GetLastError());
goto end;
}
}
@@ -700,7 +703,7 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
if (!hOpen)
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, TRUE, GetLastError());
goto end;
}
@@ -715,7 +718,7 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
if (!InternetCrackUrlW(InfoArray[iAppId].szUrl, urlLength + 1, ICU_DECODE |
ICU_ESCAPE, &urlComponents))
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, TRUE, GetLastError());
goto end;
}
@@ -729,14 +732,18 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
0);
if (!hFile)
{
- ShowLastError(hMainWnd, GetLastError());
+ if (!ShowLastError(hMainWnd, TRUE, GetLastError()))
+ {
+ /* Workaround for CORE-17377 */
+ MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD2);
+ }
goto end;
}
// query connection
if (!HttpQueryInfoW(hFile, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
&dwStatus, &dwStatusLen, NULL))
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, TRUE, GetLastError());
goto end;
}
@@ -757,7 +764,11 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
0);
if (!hFile)
{
- ShowLastError(hMainWnd, GetLastError());
+ if (!ShowLastError(hMainWnd, TRUE, GetLastError()))
+ {
+ /* Workaround for CORE-17377 */
+ MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD2);
+ }
goto end;
}
@@ -778,13 +789,13 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
}
else
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, FALSE, GetLastError());
goto end;
}
}
else
{
- ShowLastError(hMainWnd, hr);
+ ShowLastError(hMainWnd, FALSE, hr);
goto end;
}
}
@@ -842,7 +853,7 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
if (hOut == INVALID_HANDLE_VALUE)
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, FALSE, GetLastError());
goto end;
}
@@ -851,13 +862,13 @@ unsigned int WINAPI CDownloadManager::ThreadFunc(LPVOID param)
{
if (!InternetReadFile(hFile, lpBuffer, _countof(lpBuffer),
&dwBytesRead))
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, TRUE, GetLastError());
goto end;
}
if (!WriteFile(hOut, &lpBuffer[0], dwBytesRead, &dwBytesWritten,
NULL))
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, FALSE, GetLastError());
goto end;
}
@@ -947,7 +958,7 @@ run:
}
else
{
- ShowLastError(hMainWnd, GetLastError());
+ ShowLastError(hMainWnd, FALSE, GetLastError());
}
}