Module: wine Branch: master Commit: 190f9d6546644217ad8043aeea4e0ff532b09778 URL: http://source.winehq.org/git/wine.git/?a=commit;h=190f9d6546644217ad8043aeea...
Author: Juan Lang juan_lang@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;