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