Nikolay Sivov : secur32: Use CRT allocation functions for get_key_blob().
Alexandre Julliard
julliard at winehq.org
Fri May 27 16:35:30 CDT 2022
Module: wine
Branch: master
Commit: afed805be5c5db303f94ed11474e29f693cafdf5
URL: https://source.winehq.org/git/wine.git/?a=commit;h=afed805be5c5db303f94ed11474e29f693cafdf5
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri May 27 10:35:46 2022 +0300
secur32: Use CRT allocation functions for get_key_blob().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/secur32/schannel.c | 39 ++++++++++++++++++---------------------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index 0973b3c2399..618982d889e 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -444,40 +444,38 @@ static WCHAR *get_key_container_path(const CERT_CONTEXT *ctx)
{
char *str;
if (!CryptGetProvParam(keyctx.hCryptProv, PP_CONTAINER, NULL, &size, 0)) return NULL;
- if (!(str = RtlAllocateHeap(GetProcessHeap(), 0, size))) return NULL;
+ if (!(str = malloc(size))) return NULL;
if (!CryptGetProvParam(keyctx.hCryptProv, PP_CONTAINER, (BYTE *)str, &size, 0)) return NULL;
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
- if (!(ret = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(L"Software\\Wine\\Crypto\\RSA\\") + len * sizeof(WCHAR))))
+ if (!(ret = malloc(sizeof(L"Software\\Wine\\Crypto\\RSA\\") + len * sizeof(WCHAR))))
{
- RtlFreeHeap(GetProcessHeap(), 0, str);
+ free(str);
return NULL;
}
wcscpy(ret, L"Software\\Wine\\Crypto\\RSA\\");
MultiByteToWideChar(CP_ACP, 0, str, -1, ret + wcslen(ret), len);
- RtlFreeHeap(GetProcessHeap(), 0, str);
+ free(str);
}
else if (CertGetCertificateContextProperty(ctx, CERT_KEY_PROV_INFO_PROP_ID, NULL, &prov_size))
{
- if (!(prov = RtlAllocateHeap(GetProcessHeap(), 0, prov_size))) return NULL;
+ if (!(prov = malloc(prov_size))) return NULL;
if (!CertGetCertificateContextProperty(ctx, CERT_KEY_PROV_INFO_PROP_ID, prov, &prov_size))
{
- RtlFreeHeap(GetProcessHeap(), 0, prov);
+ free(prov);
return NULL;
}
- if (!(ret = RtlAllocateHeap(GetProcessHeap(), 0,
- sizeof(L"Software\\Wine\\Crypto\\RSA\\") + wcslen(prov->pwszContainerName) * sizeof(WCHAR))))
+ if (!(ret = malloc(sizeof(L"Software\\Wine\\Crypto\\RSA\\") + wcslen(prov->pwszContainerName) * sizeof(WCHAR))))
{
- RtlFreeHeap(GetProcessHeap(), 0, prov);
+ free(prov);
return NULL;
}
wcscpy(ret, L"Software\\Wine\\Crypto\\RSA\\");
wcscat(ret, prov->pwszContainerName);
- RtlFreeHeap(GetProcessHeap(), 0, prov);
+ free(prov);
}
- if (!ret && GetUserNameW(username, &len) &&
- (ret = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(L"Software\\Wine\\Crypto\\RSA\\") + len * sizeof(WCHAR))))
+ if (!ret && GetUserNameW(username, &len) && (ret = malloc(sizeof(L"Software\\Wine\\Crypto\\RSA\\") + len * sizeof(WCHAR))))
{
wcscpy(ret, L"Software\\Wine\\Crypto\\RSA\\");
wcscat(ret, username);
@@ -492,16 +490,15 @@ static BYTE *get_key_blob(const CERT_CONTEXT *ctx, DWORD *size)
BYTE *buf, *ret = NULL;
DATA_BLOB blob_in, blob_out;
DWORD spec = 0, type, len;
+ LSTATUS retval;
WCHAR *path;
HKEY hkey;
if (!(path = get_key_container_path(ctx))) return NULL;
- if (RegOpenKeyExW(HKEY_CURRENT_USER, path, 0, KEY_READ, &hkey))
- {
- RtlFreeHeap(GetProcessHeap(), 0, path);
+ retval = RegOpenKeyExW(HKEY_CURRENT_USER, path, 0, KEY_READ, &hkey);
+ free(path);
+ if (retval)
return NULL;
- }
- RtlFreeHeap(GetProcessHeap(), 0, path);
if (!RegQueryValueExW(hkey, L"KeyExchangeKeyPair", 0, &type, NULL, &len)) spec = AT_KEYEXCHANGE;
else if (!RegQueryValueExW(hkey, L"SignatureKeyPair", 0, &type, NULL, &len)) spec = AT_SIGNATURE;
@@ -511,7 +508,7 @@ static BYTE *get_key_blob(const CERT_CONTEXT *ctx, DWORD *size)
return NULL;
}
- if (!(buf = RtlAllocateHeap(GetProcessHeap(), 0, len + MAX_LEAD_BYTES)))
+ if (!(buf = malloc(len + MAX_LEAD_BYTES)))
{
RegCloseKey(hkey);
return NULL;
@@ -531,7 +528,7 @@ static BYTE *get_key_blob(const CERT_CONTEXT *ctx, DWORD *size)
ret = buf;
}
}
- else RtlFreeHeap(GetProcessHeap(), 0, buf);
+ else free(buf);
RegCloseKey(hkey);
return ret;
@@ -593,7 +590,7 @@ static SECURITY_STATUS schan_AcquireClientCredentials(const void *schanCred,
params.key_size = key_size;
params.key_blob = key_blob;
if (GNUTLS_CALL( allocate_certificate_credentials, ¶ms )) goto fail;
- RtlFreeHeap(GetProcessHeap(), 0, key_blob);
+ free(key_blob);
handle = schan_alloc_handle(creds, SCHAN_HANDLE_CRED);
if (handle == SCHAN_INVALID_HANDLE) goto fail;
@@ -612,7 +609,7 @@ static SECURITY_STATUS schan_AcquireClientCredentials(const void *schanCred,
fail:
free(creds);
- RtlFreeHeap(GetProcessHeap(), 0, key_blob);
+ free(key_blob);
return SEC_E_INTERNAL_ERROR;
}
More information about the wine-cvs
mailing list