Rémi Bernon : dssenh: Only fill hash buffer when it's provided.

Alexandre Julliard julliard at winehq.org
Tue May 25 16:08:16 CDT 2021


Module: wine
Branch: master
Commit: 9b19a110ea6adb289cc1afa8e33d8b259164801e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9b19a110ea6adb289cc1afa8e33d8b259164801e

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Tue May 25 17:37:12 2021 +0200

dssenh: Only fill hash buffer when it's provided.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30244
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dssenh/main.c         | 2 +-
 dlls/dssenh/tests/dssenh.c | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/dlls/dssenh/main.c b/dlls/dssenh/main.c
index b03c05195cd..8344b5a321b 100644
--- a/dlls/dssenh/main.c
+++ b/dlls/dssenh/main.c
@@ -940,7 +940,7 @@ BOOL WINAPI CPGetHashParam( HCRYPTPROV hprov, HCRYPTHASH hhash, DWORD param, BYT
             SetLastError( ERROR_MORE_DATA );
             return FALSE;
         }
-        memcpy( data, hash->value, hash->len );
+        if (data) memcpy( data, hash->value, hash->len );
         *len = hash->len;
         return TRUE;
 
diff --git a/dlls/dssenh/tests/dssenh.c b/dlls/dssenh/tests/dssenh.c
index f0fe4a02f97..f399f67d210 100644
--- a/dlls/dssenh/tests/dssenh.c
+++ b/dlls/dssenh/tests/dssenh.c
@@ -472,9 +472,16 @@ static void test_hash(const struct hash_test *tests, int testLen)
         ok(result && (hashLen == tests[i].hashLen), "Expected %d hash len, got %d.Error: %x\n",
             tests[i].hashLen, hashLen, GetLastError());
 
+        dataLen = 0xdeadbeef;
+        result = CryptGetHashParam(hHash, HP_HASHVAL, 0, &dataLen, 0);
+        ok(result, "Expected hash value return.\n");
+        ok(dataLen == hashLen, "Expected hash length to match.\n");
+
+        hashLen = 0xdeadbeef;
         result = CryptGetHashParam(hHash, HP_HASHVAL, hashValue, &hashLen, 0);
         ok(result, "Expected hash value return.\n");
 
+        ok(dataLen == hashLen, "Expected hash length to match.\n");
         ok(!memcmp(hashValue, tests[i].hash, tests[i].hashLen), "Incorrect hash output.\n");
 
         result = CryptHashData(hHash, data, dataLen, 0);




More information about the wine-cvs mailing list