Juan Lang : crypt32: Don' t crash when setting CRYPT_KEY_PROV_INFO with empty names.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Oct 5 05:03:18 CDT 2006


Module: wine
Branch: master
Commit: 190f9d6546644217ad8043aeea4e0ff532b09778
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=190f9d6546644217ad8043aeea4e0ff532b09778

Author: Juan Lang <juan_lang at yahoo.com>
Date:   Wed Oct  4 18:13:49 2006 -0700

crypt32: Don't crash when setting CRYPT_KEY_PROV_INFO with empty names.

---

 dlls/crypt32/cert.c |   32 ++++++++++++++++++++++++--------
 1 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c
index b520c0f..c1a638a 100644
--- a/dlls/crypt32/cert.c
+++ b/dlls/crypt32/cert.c
@@ -367,12 +367,22 @@ static void CRYPT_CopyKeyProvInfo(PCRYPT
     DWORD i;
     LPBYTE nextData = (LPBYTE)to + sizeof(CRYPT_KEY_PROV_INFO);
 
-    to->pwszContainerName = (LPWSTR)nextData;
-    lstrcpyW(to->pwszContainerName, from->pwszContainerName);
-    nextData += (lstrlenW(from->pwszContainerName) + 1) * sizeof(WCHAR);
-    to->pwszProvName = (LPWSTR)nextData;
-    lstrcpyW(to->pwszProvName, from->pwszProvName);
-    nextData += (lstrlenW(from->pwszProvName) + 1) * sizeof(WCHAR);
+    if (from->pwszContainerName)
+    {
+        to->pwszContainerName = (LPWSTR)nextData;
+        lstrcpyW(to->pwszContainerName, from->pwszContainerName);
+        nextData += (lstrlenW(from->pwszContainerName) + 1) * sizeof(WCHAR);
+    }
+    else
+        to->pwszContainerName = NULL;
+    if (from->pwszProvName)
+    {
+        to->pwszProvName = (LPWSTR)nextData;
+        lstrcpyW(to->pwszProvName, from->pwszProvName);
+        nextData += (lstrlenW(from->pwszProvName) + 1) * sizeof(WCHAR);
+    }
+    else
+        to->pwszProvName = NULL;
     to->dwProvType = from->dwProvType;
     to->dwFlags = from->dwFlags;
     to->cProvParam = from->cProvParam;
@@ -397,8 +407,14 @@ static BOOL CertContext_SetKeyProvInfoPr
     LPBYTE buf = NULL;
     DWORD size = sizeof(CRYPT_KEY_PROV_INFO), i, containerSize, provNameSize;
 
-    containerSize = (lstrlenW(info->pwszContainerName) + 1) * sizeof(WCHAR);
-    provNameSize = (lstrlenW(info->pwszProvName) + 1) * sizeof(WCHAR);
+    if (info->pwszContainerName)
+        containerSize = (lstrlenW(info->pwszContainerName) + 1) * sizeof(WCHAR);
+    else
+        containerSize = 0;
+    if (info->pwszProvName)
+        provNameSize = (lstrlenW(info->pwszProvName) + 1) * sizeof(WCHAR);
+    else
+        provNameSize = 0;
     size += containerSize + provNameSize;
     for (i = 0; i < info->cProvParam; i++)
         size += sizeof(CRYPT_KEY_PROV_PARAM) + info->rgProvParam[i].cbData;




More information about the wine-cvs mailing list