Nikolay Sivov : crypt32: Fix key name null termination (Coverity).
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 24 10:41:08 CST 2015
Module: wine
Branch: master
Commit: 53a065ae0a2f0381f71f21f7d3897ff3f33eb295
URL: http://source.winehq.org/git/wine.git/?a=commit;h=53a065ae0a2f0381f71f21f7d3897ff3f33eb295
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Nov 23 15:29:06 2015 +0300
crypt32: Fix key name null termination (Coverity).
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/crypt32/str.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c
index 7b52731..3fa5a97 100644
--- a/dlls/crypt32/str.c
+++ b/dlls/crypt32/str.c
@@ -769,7 +769,7 @@ struct KeynameKeeper
{
WCHAR buf[10]; /* big enough for L"GivenName" */
LPWSTR keyName; /* usually = buf, but may be allocated */
- DWORD keyLen;
+ DWORD keyLen; /* full available buffer size in WCHARs */
};
static void CRYPT_InitializeKeynameKeeper(struct KeynameKeeper *keeper)
@@ -795,17 +795,13 @@ static void CRYPT_KeynameKeeperFromTokenW(struct KeynameKeeper *keeper,
{
DWORD len = key->end - key->start;
- if (len > keeper->keyLen)
+ if (len >= keeper->keyLen)
{
- if (keeper->keyName == keeper->buf)
- keeper->keyName = CryptMemAlloc(len * sizeof(WCHAR));
- else
- keeper->keyName = CryptMemRealloc(keeper->keyName,
- len * sizeof(WCHAR));
- keeper->keyLen = len;
+ CRYPT_FreeKeynameKeeper( keeper );
+ keeper->keyLen = len + 1;
+ keeper->keyName = CryptMemAlloc(keeper->keyLen * sizeof(WCHAR));
}
- memcpy(keeper->keyName, key->start, (key->end - key->start) *
- sizeof(WCHAR));
+ memcpy(keeper->keyName, key->start, len * sizeof(WCHAR));
keeper->keyName[len] = '\0';
TRACE("Keyname is %s\n", debugstr_w(keeper->keyName));
}
More information about the wine-cvs
mailing list