Juan Lang : crypt32: Test decoding alternate names with embedded NULLs.

Alexandre Julliard julliard at winehq.org
Tue Nov 10 09:39:14 CST 2009


Module: wine
Branch: master
Commit: ddf78bdb3875ba58b996acb2888d8d630d94a93e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ddf78bdb3875ba58b996acb2888d8d630d94a93e

Author: Juan Lang <juan.lang at gmail.com>
Date:   Mon Nov  9 15:58:58 2009 -0800

crypt32: Test decoding alternate names with embedded NULLs.

---

 dlls/crypt32/tests/encode.c |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c
index 47a7b9b..09402de 100644
--- a/dlls/crypt32/tests/encode.c
+++ b/dlls/crypt32/tests/encode.c
@@ -1541,6 +1541,12 @@ static void test_decodeAltName(DWORD dwEncoding)
      0x00, 0x00, 0x01 };
     static const BYTE bogusType[] = { 0x30, 0x06, 0x89, 0x04, 0x7f, 0x00, 0x00,
      0x01 };
+    static const BYTE dns_embedded_null[] = { 0x30,0x10,0x82,0x0e,0x66,0x6f,
+     0x6f,0x2e,0x63,0x6f,0x6d,0x00,0x62,0x61,0x64,0x64,0x69,0x65 };
+    static const BYTE dns_embedded_bell[] = { 0x30,0x10,0x82,0x0e,0x66,0x6f,
+     0x6f,0x2e,0x63,0x6f,0x6d,0x07,0x62,0x61,0x64,0x64,0x69,0x65 };
+    static const BYTE url_embedded_null[] = { 0x30,0x10,0x86,0x0e,0x66,0x6f,
+     0x6f,0x2e,0x63,0x6f,0x6d,0x00,0x62,0x61,0x64,0x64,0x69,0x65 };
     BOOL ret;
     BYTE *buf = NULL;
     DWORD bufSize = 0;
@@ -1679,6 +1685,38 @@ static void test_decodeAltName(DWORD dwEncoding)
          "Unexpected directory name value\n");
         LocalFree(buf);
     }
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
+     dns_embedded_null, sizeof(dns_embedded_null), CRYPT_DECODE_ALLOC_FLAG,
+     NULL, &buf, &bufSize);
+    /* Fails on WinXP with CRYPT_E_ASN1_RULE.  I'm not too concerned about the
+     * particular failure, just that it doesn't decode.
+     */
+    todo_wine
+    ok(!ret, "expected failure\n");
+    /* An embedded bell character is allowed, however. */
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
+     dns_embedded_bell, sizeof(dns_embedded_bell), CRYPT_DECODE_ALLOC_FLAG,
+     NULL, &buf, &bufSize);
+    ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
+    if (ret)
+    {
+        info = (CERT_ALT_NAME_INFO *)buf;
+
+        ok(info->cAltEntry == 1, "Expected 1 entries, got %d\n",
+         info->cAltEntry);
+        ok(info->rgAltEntry[0].dwAltNameChoice == CERT_ALT_NAME_DNS_NAME,
+         "Expected CERT_ALT_NAME_DNS_NAME, got %d\n",
+         info->rgAltEntry[0].dwAltNameChoice);
+        LocalFree(buf);
+    }
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
+     url_embedded_null, sizeof(dns_embedded_null), CRYPT_DECODE_ALLOC_FLAG,
+     NULL, &buf, &bufSize);
+    /* Again, fails on WinXP with CRYPT_E_ASN1_RULE.  I'm not too concerned
+     * about the particular failure, just that it doesn't decode.
+     */
+    todo_wine
+    ok(!ret, "expected failure\n");
 }
 
 struct UnicodeExpectedError




More information about the wine-cvs mailing list