[CLIPBRD][EVENTVWR][MPLAY32][WELCOME][SYSDM]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 3 Oct 2016 12:22:29 +0000 (12:22 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 3 Oct 2016 12:22:29 +0000 (12:22 +0000)
Fix the ShowLastWin32Error helpers:
- don't display the last error string if it's ERROR_SUCCESS (since the code usually expects to display the last error message in case of errors);
- *always* call FormatMessage with the FORMAT_MESSAGE_IGNORE_INSERTS flag enabled. Indeed if it happens that the message string associated to an error ID contains insert parameter placeholders, and since we don't give here FormatMessage any argument array, the call would result into a crash without this flag.

svn path=/trunk/; revision=72897

reactos/base/applications/clipbrd/winutils.c
reactos/base/applications/mplay32/mplay32.c
reactos/base/applications/mscutils/eventvwr/eventvwr.c
reactos/base/setup/welcome/welcome.c
reactos/dll/cpl/sysdm/general.c

index 71b0e40..43697d5 100644 (file)
@@ -14,9 +14,21 @@ void ShowLastWin32Error(HWND hwndParent)
     LPWSTR lpMsgBuf = NULL;
 
     dwError = GetLastError();
+    if (dwError == ERROR_SUCCESS)
+        return;
+
+    if (!FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                        FORMAT_MESSAGE_FROM_SYSTEM |
+                        FORMAT_MESSAGE_IGNORE_INSERTS,
+                        NULL,
+                        dwError,
+                        LANG_USER_DEFAULT,
+                        (LPWSTR)&lpMsgBuf,
+                        0, NULL))
+    {
+        return;
+    }
 
-    FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
-                   NULL, dwError, 0, (LPWSTR)&lpMsgBuf, 0, NULL);
     MessageBoxW(hwndParent, lpMsgBuf, NULL, MB_OK | MB_ICONERROR);
     LocalFree(lpMsgBuf);
 }
index 7845c42..1a2e347 100644 (file)
@@ -209,16 +209,23 @@ ShowLastWin32Error(HWND hwnd)
     LPTSTR lpMessageBuffer;
     DWORD dwError = GetLastError();
 
-    if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
-                      NULL,
-                      dwError,
-                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-                      (LPTSTR)&lpMessageBuffer,
-                      0, NULL) != 0)
+    if (dwError == ERROR_SUCCESS)
+        return;
+
+    if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                       FORMAT_MESSAGE_FROM_SYSTEM |
+                       FORMAT_MESSAGE_IGNORE_INSERTS,
+                       NULL,
+                       dwError,
+                       LANG_USER_DEFAULT,
+                       (LPTSTR)&lpMessageBuffer,
+                       0, NULL))
     {
-        MessageBox(hwnd, lpMessageBuffer, szAppTitle, MB_OK | MB_ICONERROR);
-        if (lpMessageBuffer) LocalFree(lpMessageBuffer);
+        return;
     }
+
+    MessageBox(hwnd, lpMessageBuffer, szAppTitle, MB_OK | MB_ICONERROR);
+    LocalFree(lpMessageBuffer);
 }
 
 static VOID
index 96c8fd0..74d43e6 100644 (file)
@@ -245,13 +245,20 @@ ShowLastWin32Error(VOID)
     LPWSTR lpMessageBuffer;
 
     dwError = GetLastError();
-    FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
-                   NULL,
-                   dwError,
-                   0,
-                   (LPWSTR)&lpMessageBuffer,
-                   0,
-                   NULL);
+    if (dwError == ERROR_SUCCESS)
+        return;
+
+    if (!FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                        FORMAT_MESSAGE_FROM_SYSTEM |
+                        FORMAT_MESSAGE_IGNORE_INSERTS,
+                        NULL,
+                        dwError,
+                        LANG_USER_DEFAULT,
+                        (LPWSTR)&lpMessageBuffer,
+                        0, NULL))
+    {
+        return;
+    }
 
     MessageBoxW(hwndMainWindow, lpMessageBuffer, szTitle, MB_OK | MB_ICONERROR);
     LocalFree(lpMessageBuffer);
index f0a2732..bae244a 100644 (file)
@@ -113,20 +113,23 @@ ShowLastWin32Error(HWND hWnd)
     LPTSTR lpMessageBuffer = NULL;
     DWORD dwError = GetLastError();
 
-    if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
-                      NULL,
-                      dwError,
-                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-                      (LPTSTR)&lpMessageBuffer,
-                      0, NULL))
-    {
-        MessageBox(hWnd, lpMessageBuffer, szAppTitle, MB_OK | MB_ICONERROR);
-    }
+    if (dwError == ERROR_SUCCESS)
+        return;
 
-    if (lpMessageBuffer)
+    if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                       FORMAT_MESSAGE_FROM_SYSTEM |
+                       FORMAT_MESSAGE_IGNORE_INSERTS,
+                       NULL,
+                       dwError,
+                       LANG_USER_DEFAULT,
+                       (LPTSTR)&lpMessageBuffer,
+                       0, NULL))
     {
-        LocalFree(lpMessageBuffer);
+        return;
     }
+
+    MessageBox(hWnd, lpMessageBuffer, szAppTitle, MB_OK | MB_ICONERROR);
+    LocalFree(lpMessageBuffer);
 }
 #endif
 
index 33e209a..9516c33 100644 (file)
@@ -35,23 +35,23 @@ VOID ShowLastWin32Error(HWND hWndOwner)
     DWORD LastError;
 
     LastError = GetLastError();
+    if (LastError == ERROR_SUCCESS)
+        return;
 
-    if ((LastError == 0) ||
-         !FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
-                        FORMAT_MESSAGE_FROM_SYSTEM,
-                        NULL,
-                        LastError,
-                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-                        (LPTSTR)&lpMsg,
-                        0,
-                        NULL))
+    if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                       FORMAT_MESSAGE_FROM_SYSTEM |
+                       FORMAT_MESSAGE_IGNORE_INSERTS,
+                       NULL,
+                       LastError,
+                       LANG_USER_DEFAULT,
+                       (LPTSTR)&lpMsg,
+                       0, NULL))
     {
         return;
     }
 
     MessageBox(hWndOwner, lpMsg, NULL, MB_OK | MB_ICONERROR);
-
-    LocalFree((LPVOID)lpMsg);
+    LocalFree(lpMsg);
 }