From f9bca7ed42235ca72587b6886f2bb02e992a79a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Tue, 25 May 2021 17:37:12 +0200 Subject: [PATCH] dssenh: Only fill hash buffer when it's provided. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30244 Signed-off-by: RĂ©mi Bernon Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard (cherry picked from commit 9b19a110ea6adb289cc1afa8e33d8b259164801e) Signed-off-by: Michael Stefaniuc --- 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 6286b4604fb..2f100d3473e 100644 --- a/dlls/dssenh/main.c +++ b/dlls/dssenh/main.c @@ -942,7 +942,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);