[PATCH] crypt32: Add CRYPT_STRING_BINARY mode for CryptBinaryToStringW().
Nikolay Sivov
nsivov at codeweavers.com
Thu Sep 27 03:01:12 CDT 2018
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/crypt32/base64.c | 25 ++++++++++++++++++++++++-
dlls/crypt32/tests/base64.c | 5 +----
2 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/dlls/crypt32/base64.c b/dlls/crypt32/base64.c
index ac288b7c5e..f21476ecfe 100644
--- a/dlls/crypt32/base64.c
+++ b/dlls/crypt32/base64.c
@@ -294,6 +294,27 @@ 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 +493,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 e6adc7ab38..4ff76272e3 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);
--
2.19.0
More information about the wine-devel
mailing list