[CREDUI] Sync with Wine Staging 4.0. CORE-15682
authorAmine Khaldi <amine.khaldi@reactos.org>
Fri, 25 Jan 2019 12:17:45 +0000 (13:17 +0100)
committerAmine Khaldi <amine.khaldi@reactos.org>
Fri, 25 Jan 2019 12:17:45 +0000 (13:17 +0100)
dll/win32/credui/credui_main.c
media/doc/README.WINE

index bf9f7d1..99aa9a1 100644 (file)
@@ -89,7 +89,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 
             HeapFree(GetProcessHeap(), 0, entry->pszTargetName);
             HeapFree(GetProcessHeap(), 0, entry->pszUsername);
-            ZeroMemory(entry->pszPassword, (strlenW(entry->pszPassword) + 1) * sizeof(WCHAR));
+            SecureZeroMemory(entry->pszPassword, strlenW(entry->pszPassword) * sizeof(WCHAR));
             HeapFree(GetProcessHeap(), 0, entry->pszPassword);
             HeapFree(GetProcessHeap(), 0, entry);
         }
@@ -160,20 +160,27 @@ static void CredDialogFillUsernameCombo(HWND hwndUsername, const struct cred_dia
         DWORD j;
         BOOL duplicate = FALSE;
 
+        if (!credentials[i]->UserName)
+            continue;
+
         if (params->dwFlags & CREDUI_FLAGS_GENERIC_CREDENTIALS)
         {
-            if ((credentials[i]->Type != CRED_TYPE_GENERIC) || !credentials[i]->UserName)
+            if (credentials[i]->Type != CRED_TYPE_GENERIC)
+            {
+                credentials[i]->UserName = NULL;
                 continue;
+            }
         }
-        else
+        else if (credentials[i]->Type == CRED_TYPE_GENERIC)
         {
-            if (credentials[i]->Type == CRED_TYPE_GENERIC)
-                continue;
+            credentials[i]->UserName = NULL;
+            continue;
         }
 
         /* don't add another item with the same name if we've already added it */
         for (j = 0; j < i; j++)
-            if (!strcmpW(credentials[i]->UserName, credentials[j]->UserName))
+            if (credentials[j]->UserName
+                && !strcmpW(credentials[i]->UserName, credentials[j]->UserName))
             {
                 duplicate = TRUE;
                 break;
@@ -673,7 +680,7 @@ DWORD WINAPI CredUIPromptForCredentialsW(PCREDUI_INFOW pUIInfo,
                 {
                     found = TRUE;
                     HeapFree(GetProcessHeap(), 0, entry->pszUsername);
-                    ZeroMemory(entry->pszPassword, (strlenW(entry->pszPassword) + 1) * sizeof(WCHAR));
+                    SecureZeroMemory(entry->pszPassword, strlenW(entry->pszPassword) * sizeof(WCHAR));
                     HeapFree(GetProcessHeap(), 0, entry->pszPassword);
                 }
 
@@ -733,7 +740,7 @@ DWORD WINAPI CredUIConfirmCredentialsW(PCWSTR pszTargetName, BOOL bConfirm)
 
             HeapFree(GetProcessHeap(), 0, entry->pszTargetName);
             HeapFree(GetProcessHeap(), 0, entry->pszUsername);
-            ZeroMemory(entry->pszPassword, (strlenW(entry->pszPassword) + 1) * sizeof(WCHAR));
+            SecureZeroMemory(entry->pszPassword, strlenW(entry->pszPassword) * sizeof(WCHAR));
             HeapFree(GetProcessHeap(), 0, entry->pszPassword);
             HeapFree(GetProcessHeap(), 0, entry);
 
index 577d474..532d520 100644 (file)
@@ -57,7 +57,7 @@ reactos/dll/win32/comcat              # Synced to WineStaging-3.3
 reactos/dll/win32/comctl32            # Synced to Wine-3.0
 reactos/dll/win32/comdlg32            # Synced to WineStaging-4.0
 reactos/dll/win32/compstui            # Synced to WineStaging-3.3
-reactos/dll/win32/credui              # Synced to WineStaging-3.17
+reactos/dll/win32/credui              # Synced to WineStaging-4.0
 reactos/dll/win32/crypt32             # Synced to WineStaging-3.17
 reactos/dll/win32/cryptdlg            # Synced to WineStaging-3.3
 reactos/dll/win32/cryptdll            # Synced to WineStaging-3.3