Nikolay Sivov : crypt32: Add CRYPT_STRING_BINARY mode for CryptBinaryToStringW().

Alexandre Julliard julliard at winehq.org
Thu Sep 27 18:25:14 CDT 2018


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Sep 27 17:27:56 2018 +0300

crypt32: Add CRYPT_STRING_BINARY mode for CryptBinaryToStringW().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/crypt32/base64.c       | 27 ++++++++++++++++++++++++---
 dlls/crypt32/tests/base64.c |  5 +----
 2 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/dlls/crypt32/base64.c b/dlls/crypt32/base64.c
index ac288b7..d158c1a 100644
--- a/dlls/crypt32/base64.c
+++ b/dlls/crypt32/base64.c
@@ -88,8 +88,7 @@ static BOOL EncodeBinaryToBinaryA(const BYTE *pbBinary,
             memcpy(pszString, pbBinary, cbBinary);
     }
     else
-
-    *pcchString = cbBinary;
+        *pcchString = cbBinary;
 
     return ret;
 }
@@ -294,6 +293,26 @@ BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary,
     return encoder(pbBinary, cbBinary, dwFlags, pszString, pcchString);
 }
 
+static BOOL EncodeBinaryToBinaryW(const BYTE *in_buf, DWORD in_len, DWORD flags, WCHAR *out_buf, DWORD *out_len)
+{
+    BOOL ret = TRUE;
+
+    if (out_buf)
+    {
+        if (*out_len < in_len)
+        {
+            SetLastError(ERROR_INSUFFICIENT_BUFFER);
+            ret = FALSE;
+        }
+        else if (in_len)
+            memcpy(out_buf, in_buf, in_len);
+    }
+    else
+        *out_len = in_len;
+
+    return ret;
+}
+
 static LONG encodeBase64W(const BYTE *in_buf, int in_len, LPCWSTR sep,
  WCHAR* out_buf, DWORD *out_len)
 {
@@ -472,13 +491,15 @@ BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary,
 
     switch (dwFlags & 0x0fffffff)
     {
+    case CRYPT_STRING_BINARY:
+        encoder = EncodeBinaryToBinaryW;
+        break;
     case CRYPT_STRING_BASE64:
     case CRYPT_STRING_BASE64HEADER:
     case CRYPT_STRING_BASE64REQUESTHEADER:
     case CRYPT_STRING_BASE64X509CRLHEADER:
         encoder = BinaryToBase64W;
         break;
-    case CRYPT_STRING_BINARY:
     case CRYPT_STRING_HEX:
     case CRYPT_STRING_HEXASCII:
     case CRYPT_STRING_HEXADDR:
diff --git a/dlls/crypt32/tests/base64.c b/dlls/crypt32/tests/base64.c
index e6adc7a..4ff7627 100644
--- a/dlls/crypt32/tests/base64.c
+++ b/dlls/crypt32/tests/base64.c
@@ -284,17 +284,14 @@ static void test_CryptBinaryToString(void)
 
         strLen = 0;
         ret = CryptBinaryToStringW(tests[i].toEncode, tests[i].toEncodeLen, CRYPT_STRING_BINARY, NULL, &strLen);
-    todo_wine {
         ok(ret, "CryptBinaryToStringW failed: %d\n", GetLastError());
         ok(strLen == tests[i].toEncodeLen, "Unexpected required length %u.\n", strLen);
-    }
+
         strLen2 = strLen;
         strW = heap_alloc(strLen);
         ret = CryptBinaryToStringW(tests[i].toEncode, tests[i].toEncodeLen, CRYPT_STRING_BINARY, strW, &strLen2);
-    todo_wine
         ok(ret, "CryptBinaryToStringW failed: %d\n", GetLastError());
         ok(strLen == strLen2, "Expected length %u, got %u\n", strLen, strLen2);
-    todo_wine
         ok(!memcmp(strW, tests[i].toEncode, tests[i].toEncodeLen), "Unexpected value\n");
         heap_free(strW);
 




More information about the wine-cvs mailing list