[PATCH 2/2] crypt32: Fix CryptBinaryToStringW() to return required length properly.

Nikolay Sivov nsivov at codeweavers.com
Tue Feb 11 03:25:40 CST 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/crypt32/base64.c       | 11 +++++++----
 dlls/crypt32/tests/base64.c |  5 +----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dlls/crypt32/base64.c b/dlls/crypt32/base64.c
index 221b452d7e..73619421ab 100644
--- a/dlls/crypt32/base64.c
+++ b/dlls/crypt32/base64.c
@@ -490,16 +490,19 @@ static BOOL BinaryToHexW(const BYTE *bin, DWORD nbin, DWORD flags, LPWSTR str, D
         needed = 2;
 
     needed += nbin * 2 + 1;
+
+    if (!str)
+    {
+        *nstr = needed;
+        return TRUE;
+    }
+
     if (needed > *nstr)
     {
         SetLastError(ERROR_MORE_DATA);
         return FALSE;
     }
 
-    *nstr = needed;
-    if (!str)
-        return TRUE;
-
     while (nbin--)
     {
         *str++ = hex[(*bin >> 4) & 0xf];
diff --git a/dlls/crypt32/tests/base64.c b/dlls/crypt32/tests/base64.c
index 874f8e432d..7b9f4c1077 100644
--- a/dlls/crypt32/tests/base64.c
+++ b/dlls/crypt32/tests/base64.c
@@ -366,10 +366,8 @@ static void test_CryptBinaryToString(void)
     /* Systems that don't support HEXRAW format convert to BASE64 instead - 3 bytes in -> 4 chars + crlf + 1 null out. */
     strLen = 0;
     ret = CryptBinaryToStringW(input, 3, CRYPT_STRING_HEXRAW, NULL, &strLen);
-todo_wine {
     ok(ret, "Failed to get string length.\n");
     ok(strLen == 9 || broken(strLen == 7), "Unexpected string length %d.\n", strLen);
-}
     if (strLen == 7)
     {
         win_skip("CryptBinaryToString(HEXRAW) not supported\n");
@@ -383,10 +381,9 @@ todo_wine {
     {
         strLen = 0;
         ret = CryptBinaryToStringW(input, sizeof(input), CRYPT_STRING_HEXRAW|flags[i], NULL, &strLen);
-todo_wine {
         ok(ret, "CryptBinaryToStringW failed: %d\n", GetLastError());
         ok(strLen > 0, "Unexpected string length.\n");
-}
+
         strLen = ~0;
         ret = CryptBinaryToStringW(input, sizeof(input), CRYPT_STRING_HEXRAW|flags[i],
                                    NULL, &strLen);
-- 
2.25.0




More information about the wine-devel mailing list