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