[PATCH] crypt32: quote ; and , in Certificate output

Marcus Meissner marcus at jet.franken.de
Thu Jun 3 16:38:42 CDT 2010


Hi,

This fixes http://bugs.winehq.org/show_bug.cgi?id=21485
(Kindle final version does not start).

... ,O=VeriSign, Inc.,OU=... was misparsed as the ,
needs to be quoted.

Adjusted the testcases to check , and ; quoting.

" also needs to be fixed at some point.

Ciao, Marcus
---
 dlls/crypt32/str.c       |   85 ++++++++++++++++++++++++++++++++++++++++++---
 dlls/crypt32/tests/str.c |   77 ++++++++++++++++++++---------------------
 2 files changed, 116 insertions(+), 46 deletions(-)

diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c
index 758abc9..6876c97 100644
--- a/dlls/crypt32/str.c
+++ b/dlls/crypt32/str.c
@@ -190,6 +190,7 @@ DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
     static const char crlfSep[] = "\r\n";
     static const char plusSep[] = " + ";
     static const char spaceSep[] = " ";
+    static const char quoteSep[] = "\"";
     DWORD ret = 0, bytes = 0;
     BOOL bRet;
     CERT_NAME_INFO *info;
@@ -204,7 +205,7 @@ DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
     if (bRet)
     {
         DWORD i, j, sepLen, rdnSepLen;
-        LPCSTR sep, rdnSep;
+        LPCSTR sep, rdnSep, quote;
         BOOL reverse = dwStrType & CERT_NAME_STR_REVERSE_FLAG;
         const CERT_RDN *rdn = info->rgRDN;
 
@@ -222,11 +223,16 @@ DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
         else
             rdnSep = plusSep;
         rdnSepLen = strlen(rdnSep);
+        if (dwStrType & CERT_NAME_STR_NO_QUOTING_FLAG)
+            quote = NULL;
+        else
+            quote = quoteSep;
         for (i = 0; (!psz || ret < csz) && i < info->cRDN; i++)
         {
             for (j = 0; (!psz || ret < csz) && j < rdn->cRDNAttr; j++)
             {
                 DWORD chars;
+                int needquote = 0;
                 char prefixBuf[10]; /* big enough for GivenName */
                 LPCSTR prefix = NULL;
 
@@ -255,13 +261,44 @@ DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
                      psz ? psz + ret : NULL, psz ? csz - ret - 1 : 0);
                     ret += chars;
                 }
-                /* FIXME: handle quoting */
+                /* FIXME: quoting still misses " (which is replaced by "") */
                 chars = CertRDNValueToStrA(
                  rdn->rgRDNAttr[j].dwValueType,
                  &rdn->rgRDNAttr[j].Value, psz ? psz + ret : NULL,
                  psz ? csz - ret : 0);
-                if (chars)
+
+                /* poor mans memmem(), for , seperation */
+                if (psz && quote && chars) {
+                    int xx;
+                    for (xx=0;xx<chars-1;xx++) {
+                       if ((psz[ret+xx] == ',') ||
+                           (psz[ret+xx] == ';'))
+                       {
+                           needquote = 1;
+                           break;
+                       }
+                    }
+                }
+                if (psz && quote && chars && needquote) {
+             	    /* - 1 is needed to account for the null terminator. */
+                    if (psz && ret < csz - strlen(quote) - 1)
+                        memcpy (psz + ret, quote, strlen(quote));
+                    ret += strlen(quote);
+
+                    chars = CertRDNValueToStrA(
+                     rdn->rgRDNAttr[j].dwValueType,
+                     &rdn->rgRDNAttr[j].Value, psz ? psz + ret : NULL,
+                     psz ? csz - ret : 0);
                     ret += chars - 1;
+                    if (psz && ret < csz - strlen(quote) - 1)
+                        memcpy (psz + ret, quote, strlen(quote));
+                    ret += strlen(quote);
+                } else {
+                    if (chars)
+                        ret += chars - 1;
+                }
+
+                /* FIXME: handle quoting */
                 if (j < rdn->cRDNAttr - 1)
                 {
                     if (psz && ret < csz - rdnSepLen - 1)
@@ -353,6 +390,7 @@ DWORD cert_name_to_str_with_indent(DWORD dwCertEncodingType, DWORD indentLevel,
     static const WCHAR crlfSep[] = { '\r','\n',0 };
     static const WCHAR plusSep[] = { ' ','+',' ',0 };
     static const WCHAR spaceSep[] = { ' ',0 };
+    static const WCHAR quoteSep[] = { '"',0 };
     DWORD ret = 0, bytes = 0;
     BOOL bRet;
     CERT_NAME_INFO *info;
@@ -365,7 +403,7 @@ DWORD cert_name_to_str_with_indent(DWORD dwCertEncodingType, DWORD indentLevel,
     if (bRet)
     {
         DWORD i, j, sepLen, rdnSepLen;
-        LPCWSTR sep, rdnSep;
+        LPCWSTR sep, rdnSep, quote;
         BOOL reverse = dwStrType & CERT_NAME_STR_REVERSE_FLAG;
         const CERT_RDN *rdn = info->rgRDN;
 
@@ -383,11 +421,16 @@ DWORD cert_name_to_str_with_indent(DWORD dwCertEncodingType, DWORD indentLevel,
         else
             rdnSep = plusSep;
         rdnSepLen = lstrlenW(rdnSep);
+        if (dwStrType & CERT_NAME_STR_NO_QUOTING_FLAG)
+            quote = NULL;
+        else
+            quote = quoteSep;
         for (i = 0; (!psz || ret < csz) && i < info->cRDN; i++)
         {
             for (j = 0; (!psz || ret < csz) && j < rdn->cRDNAttr; j++)
             {
                 DWORD chars;
+                int needquote = 0;
                 LPCSTR prefixA = NULL;
                 LPCWSTR prefixW = NULL;
 
@@ -435,13 +478,43 @@ DWORD cert_name_to_str_with_indent(DWORD dwCertEncodingType, DWORD indentLevel,
                      psz ? psz + ret : NULL, psz ? csz - ret - 1 : 0);
                     ret += chars;
                 }
-                /* FIXME: handle quoting */
+                /* FIXME: quoting still misses " (which is replaced by "") */
                 chars = CertRDNValueToStrW(
                  rdn->rgRDNAttr[j].dwValueType,
                  &rdn->rgRDNAttr[j].Value, psz ? psz + ret : NULL,
                  psz ? csz - ret : 0);
-                if (chars)
+
+                /* poor mans memmem(), for , seperation */
+                if (psz && quote && chars) {
+                    int xx;
+                    for (xx=0;xx<chars-1;xx++) {
+                       if ((psz[ret+xx] == ',') ||
+                           (psz[ret+xx] == ';'))
+                       {
+                           needquote = 1;
+                           break;
+                       }
+                    }
+                }
+                if (psz && quote && chars && needquote) {
+             	    /* - 1 is needed to account for the NULL terminator. */
+                    if (psz && ret < csz - lstrlenW(quote) - 1)
+                        memcpy (psz + ret, quote, lstrlenW(quote) * sizeof(WCHAR));
+                    ret += lstrlenW(quote);
+
+                    chars = CertRDNValueToStrW(
+                     rdn->rgRDNAttr[j].dwValueType,
+                     &rdn->rgRDNAttr[j].Value, psz ? psz + ret : NULL,
+                     psz ? csz - ret : 0);
                     ret += chars - 1;
+                    if (psz && ret < csz - lstrlenW(quote) - 1)
+                        memcpy (psz + ret, quote, lstrlenW(quote) * sizeof(WCHAR));
+                    ret += lstrlenW(quote);
+                } else {
+                    if (chars)
+                        ret += chars - 1;
+                }
+
                 if (j < rdn->cRDNAttr - 1)
                 {
                     if (psz && ret < csz - rdnSepLen - 1)
diff --git a/dlls/crypt32/tests/str.c b/dlls/crypt32/tests/str.c
index ebc3342..2549bcc 100644
--- a/dlls/crypt32/tests/str.c
+++ b/dlls/crypt32/tests/str.c
@@ -67,12 +67,12 @@ static const BYTE cert[] =
  0x73,0x6f,0x74,0x61,0x31,0x14,0x30,0x12,0x6,0x3,0x55,0x4,0x7,0x13,0xb,0x4d,
  0x69,0x6e,0x6e,0x65,0x61,0x70,0x6f,0x6c,0x69,0x73,0x31,0x14,0x30,0x12,0x6,0x3,
  0x55,0x4,0xa,0x13,0xb,0x43,0x6f,0x64,0x65,0x57,0x65,0x61,0x76,0x65,0x72,0x73,
- 0x31,0x19,0x30,0x17,0x6,0x3,0x55,0x4,0xb,0x13,0x10,0x57,0x69,0x6e,0x65,0x20,
+ 0x31,0x19,0x30,0x17,0x6,0x3,0x55,0x4,0xb,0x13,0x10,0x57,0x69,0x6e,0x65,0x2c,
  0x44,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,0x65,0x6e,0x74,0x31,0x12,0x30,0x10,
  0x6,0x3,0x55,0x4,0x3,0x13,0x9,0x6c,0x6f,0x63,0x61,0x6c,0x68,0x6f,0x73,0x74,
  0x31,0x23,0x30,0x21,0x6,0x9,0x2a,0x86,0x48,0x86,0xf7,0xd,0x1,0x9,0x1,0x16,
  0x14,0x61,0x72,0x69,0x63,0x40,0x63,0x6f,0x64,0x65,0x77,0x65,0x61,0x76,0x65,
- 0x72,0x73,0x2e,0x63,0x6f,0x6d,0x30,0x1e,0x17,0xd,0x30,0x36,0x30,0x31,0x32,
+ 0x72,0x73,0x3b,0x63,0x6f,0x6d,0x30,0x1e,0x17,0xd,0x30,0x36,0x30,0x31,0x32,
  0x35,0x31,0x33,0x35,0x37,0x32,0x34,0x5a,0x17,0xd,0x30,0x36,0x30,0x32,0x32,
  0x34,0x31,0x33,0x35,0x37,0x32,0x34,0x5a,0x30,0x81,0xa1,0x31,0xb,0x30,0x9,0x6,
  0x3,0x55,0x4,0x6,0x13,0x2,0x55,0x53,0x31,0x12,0x30,0x10,0x6,0x3,0x55,0x4,0x8,
@@ -80,11 +80,11 @@ static const BYTE cert[] =
  0x3,0x55,0x4,0x7,0x13,0xb,0x4d,0x69,0x6e,0x6e,0x65,0x61,0x70,0x6f,0x6c,0x69,
  0x73,0x31,0x14,0x30,0x12,0x6,0x3,0x55,0x4,0xa,0x13,0xb,0x43,0x6f,0x64,0x65,
  0x57,0x65,0x61,0x76,0x65,0x72,0x73,0x31,0x19,0x30,0x17,0x6,0x3,0x55,0x4,0xb,
- 0x13,0x10,0x57,0x69,0x6e,0x65,0x20,0x44,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,
+ 0x13,0x10,0x57,0x69,0x6e,0x65,0x2c,0x44,0x65,0x76,0x65,0x6c,0x6f,0x70,0x6d,
  0x65,0x6e,0x74,0x31,0x12,0x30,0x10,0x6,0x3,0x55,0x4,0x3,0x13,0x9,0x6c,0x6f,
  0x63,0x61,0x6c,0x68,0x6f,0x73,0x74,0x31,0x23,0x30,0x21,0x6,0x9,0x2a,0x86,0x48,
  0x86,0xf7,0xd,0x1,0x9,0x1,0x16,0x14,0x61,0x72,0x69,0x63,0x40,0x63,0x6f,0x64,
- 0x65,0x77,0x65,0x61,0x76,0x65,0x72,0x73,0x2e,0x63,0x6f,0x6d,0x30,0x81,0x9f,
+ 0x65,0x77,0x65,0x61,0x76,0x65,0x72,0x73,0x3b,0x63,0x6f,0x6d,0x30,0x81,0x9f,
  0x30,0xd,0x6,0x9,0x2a,0x86,0x48,0x86,0xf7,0xd,0x1,0x1,0x1,0x5,0x0,0x3,0x81,
  0x8d,0x0,0x30,0x81,0x89,0x2,0x81,0x81,0x0,0x9b,0xb5,0x8f,0xaf,0xfb,0x9a,0xaf,
  0xdc,0xa2,0x4d,0xb1,0xc8,0x72,0x44,0xef,0x79,0x7f,0x28,0xb6,0xfe,0x50,0xdc,
@@ -107,71 +107,71 @@ static const BYTE cert[] =
  0x91,0x8a,0xf8,0x5,0xef,0x5b,0x3b,0x49,0xbf,0x5f,0x2b};
 
 static char issuerStr[] =
- "US, Minnesota, Minneapolis, CodeWeavers, Wine Development, localhost, aric at codeweavers.com";
+ "US, Minnesota, Minneapolis, CodeWeavers, \"Wine,Development\", localhost, \"aric at codeweavers;com\"";
 static char issuerStrSemicolon[] =
- "US; Minnesota; Minneapolis; CodeWeavers; Wine Development; localhost; aric at codeweavers.com";
+ "US; Minnesota; Minneapolis; CodeWeavers; \"Wine,Development\"; localhost; \"aric at codeweavers;com\"";
 static char issuerStrCRLF[] =
- "US\r\nMinnesota\r\nMinneapolis\r\nCodeWeavers\r\nWine Development\r\nlocalhost\r\naric at codeweavers.com";
+ "US\r\nMinnesota\r\nMinneapolis\r\nCodeWeavers\r\n\"Wine,Development\"\r\nlocalhost\r\n\"aric at codeweavers;com\"";
 static char subjectStr[] =
- "2.5.4.6=US, 2.5.4.8=Minnesota, 2.5.4.7=Minneapolis, 2.5.4.10=CodeWeavers, 2.5.4.11=Wine Development, 2.5.4.3=localhost, 1.2.840.113549.1.9.1=aric at codeweavers.com";
+ "2.5.4.6=US, 2.5.4.8=Minnesota, 2.5.4.7=Minneapolis, 2.5.4.10=CodeWeavers, 2.5.4.11=\"Wine,Development\", 2.5.4.3=localhost, 1.2.840.113549.1.9.1=\"aric at codeweavers;com\"";
 static char subjectStrSemicolon[] =
- "2.5.4.6=US; 2.5.4.8=Minnesota; 2.5.4.7=Minneapolis; 2.5.4.10=CodeWeavers; 2.5.4.11=Wine Development; 2.5.4.3=localhost; 1.2.840.113549.1.9.1=aric at codeweavers.com";
+ "2.5.4.6=US; 2.5.4.8=Minnesota; 2.5.4.7=Minneapolis; 2.5.4.10=CodeWeavers; 2.5.4.11=\"Wine,Development\"; 2.5.4.3=localhost; 1.2.840.113549.1.9.1=\"aric at codeweavers;com\"";
 static char subjectStrCRLF[] =
- "2.5.4.6=US\r\n2.5.4.8=Minnesota\r\n2.5.4.7=Minneapolis\r\n2.5.4.10=CodeWeavers\r\n2.5.4.11=Wine Development\r\n2.5.4.3=localhost\r\n1.2.840.113549.1.9.1=aric at codeweavers.com";
-static char x500SubjectStr[] = "C=US, S=Minnesota, L=Minneapolis, O=CodeWeavers, OU=Wine Development, CN=localhost, E=aric at codeweavers.com";
-static char x500SubjectStrSemicolonReverse[] = "E=aric at codeweavers.com; CN=localhost; OU=Wine Development; O=CodeWeavers; L=Minneapolis; S=Minnesota; C=US";
+ "2.5.4.6=US\r\n2.5.4.8=Minnesota\r\n2.5.4.7=Minneapolis\r\n2.5.4.10=CodeWeavers\r\n2.5.4.11=\"Wine,Development\"\r\n2.5.4.3=localhost\r\n1.2.840.113549.1.9.1=\"aric at codeweavers;com\"";
+static char x500SubjectStr[] = "C=US, S=Minnesota, L=Minneapolis, O=CodeWeavers, OU=\"Wine,Development\", CN=localhost, E=\"aric at codeweavers;com\"";
+static char x500SubjectStrSemicolonReverse[] = "E=\"aric at codeweavers;com\"; CN=localhost; OU=\"Wine,Development\"; O=CodeWeavers; L=Minneapolis; S=Minnesota; C=US";
 static WCHAR issuerStrW[] = {
  'U','S',',',' ','M','i','n','n','e','s','o','t','a',',',' ','M','i','n','n',
  'e','a','p','o','l','i','s',',',' ','C','o','d','e','W','e','a','v','e','r',
- 's',',',' ','W','i','n','e',' ','D','e','v','e','l','o','p','m','e','n','t',
- ',',' ','l','o','c','a','l','h','o','s','t',',',' ','a','r','i','c','@','c',
- 'o','d','e','w','e','a','v','e','r','s','.','c','o','m',0 };
+ 's',',',' ','"','W','i','n','e',',','D','e','v','e','l','o','p','m','e','n','t','"',
+ ',',' ','l','o','c','a','l','h','o','s','t',',',' ','"','a','r','i','c','@','c',
+ 'o','d','e','w','e','a','v','e','r','s',';','c','o','m','"',0 };
 static WCHAR issuerStrSemicolonW[] = {
  'U','S',';',' ','M','i','n','n','e','s','o','t','a',';',' ','M','i','n','n',
  'e','a','p','o','l','i','s',';',' ','C','o','d','e','W','e','a','v','e','r',
- 's',';',' ','W','i','n','e',' ','D','e','v','e','l','o','p','m','e','n','t',
- ';',' ','l','o','c','a','l','h','o','s','t',';',' ','a','r','i','c','@','c',
- 'o','d','e','w','e','a','v','e','r','s','.','c','o','m',0 };
+ 's',';',' ','"','W','i','n','e',',','D','e','v','e','l','o','p','m','e','n','t','"',
+ ';',' ','l','o','c','a','l','h','o','s','t',';',' ','"','a','r','i','c','@','c',
+ 'o','d','e','w','e','a','v','e','r','s',';','c','o','m','"',0 };
 static WCHAR issuerStrCRLFW[] = {
  'U','S','\r','\n','M','i','n','n','e','s','o','t','a','\r','\n','M','i','n',
  'n','e','a','p','o','l','i','s','\r','\n','C','o','d','e','W','e','a','v','e',
- 'r','s','\r','\n','W','i','n','e',' ','D','e','v','e','l','o','p','m','e','n',
- 't','\r','\n','l','o','c','a','l','h','o','s','t','\r','\n','a','r','i','c',
- '@','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0 };
+ 'r','s','\r','\n','"','W','i','n','e',',','D','e','v','e','l','o','p','m','e','n',
+ 't','"','\r','\n','l','o','c','a','l','h','o','s','t','\r','\n','"','a','r','i','c',
+ '@','c','o','d','e','w','e','a','v','e','r','s',';','c','o','m','"',0 };
 static WCHAR subjectStrW[] = {
  '2','.','5','.','4','.','6','=','U','S',',',' ','2','.','5','.','4','.','8',
  '=','M','i','n','n','e','s','o','t','a',',',' ','2','.','5','.','4','.','7',
  '=','M','i','n','n','e','a','p','o','l','i','s',',',' ','2','.','5','.','4',
  '.','1','0','=','C','o','d','e','W','e','a','v','e','r','s',',',' ','2','.',
- '5','.','4','.','1','1','=','W','i','n','e',' ','D','e','v','e','l','o','p',
- 'm','e','n','t',',',' ','2','.','5','.','4','.','3','=','l','o','c','a','l',
+ '5','.','4','.','1','1','=','"','W','i','n','e',',','D','e','v','e','l','o','p',
+ 'm','e','n','t','"',',',' ','2','.','5','.','4','.','3','=','l','o','c','a','l',
  'h','o','s','t',',',' ','1','.','2','.','8','4','0','.','1','1','3','5','4',
- '9','.','1','.','9','.','1','=','a','r','i','c','@','c','o','d','e','w','e',
- 'a','v','e','r','s','.','c','o','m',0 };
+ '9','.','1','.','9','.','1','=','"','a','r','i','c','@','c','o','d','e','w','e',
+ 'a','v','e','r','s',';','c','o','m','"',0 };
 static WCHAR subjectStrSemicolonW[] = {
  '2','.','5','.','4','.','6','=','U','S',';',' ','2','.','5','.','4','.','8',
  '=','M','i','n','n','e','s','o','t','a',';',' ','2','.','5','.','4','.','7',
  '=','M','i','n','n','e','a','p','o','l','i','s',';',' ','2','.','5','.','4',
  '.','1','0','=','C','o','d','e','W','e','a','v','e','r','s',';',' ','2','.',
- '5','.','4','.','1','1','=','W','i','n','e',' ','D','e','v','e','l','o','p',
- 'm','e','n','t',';',' ','2','.','5','.','4','.','3','=','l','o','c','a','l',
+ '5','.','4','.','1','1','=','"','W','i','n','e',',','D','e','v','e','l','o','p',
+ 'm','e','n','t','"',';',' ','2','.','5','.','4','.','3','=','l','o','c','a','l',
  'h','o','s','t',';',' ','1','.','2','.','8','4','0','.','1','1','3','5','4',
- '9','.','1','.','9','.','1','=','a','r','i','c','@','c','o','d','e','w','e',
- 'a','v','e','r','s','.','c','o','m',0 };
+ '9','.','1','.','9','.','1','=','"','a','r','i','c','@','c','o','d','e','w','e',
+ 'a','v','e','r','s',';','c','o','m','"',0 };
 static WCHAR subjectStrCRLFW[] = {
  '2','.','5','.','4','.','6','=','U','S','\r','\n','2','.','5','.','4','.','8',
  '=','M','i','n','n','e','s','o','t','a','\r','\n','2','.','5','.','4','.','7',
  '=','M','i','n','n','e','a','p','o','l','i','s','\r','\n','2','.','5','.','4',
  '.','1','0','=','C','o','d','e','W','e','a','v','e','r','s','\r','\n','2','.',
- '5','.','4','.','1','1','=','W','i','n','e',' ','D','e','v','e','l','o','p',
- 'm','e','n','t','\r','\n','2','.','5','.','4','.','3','=','l','o','c','a','l',
+ '5','.','4','.','1','1','=','"','W','i','n','e',',','D','e','v','e','l','o','p',
+ 'm','e','n','t','"','\r','\n','2','.','5','.','4','.','3','=','l','o','c','a','l',
  'h','o','s','t','\r','\n','1','.','2','.','8','4','0','.','1','1','3','5','4',
- '9','.','1','.','9','.','1','=','a','r','i','c','@','c','o','d','e','w','e',
- 'a','v','e','r','s','.','c','o','m',0 };
+ '9','.','1','.','9','.','1','=','"','a','r','i','c','@','c','o','d','e','w','e',
+ 'a','v','e','r','s',';','c','o','m','"',0 };
 static WCHAR x500SubjectStrSemicolonReverseW[] = {
- 'E','=','a','r','i','c','@','c','o','d','e','w','e','a','v','e','r','s','.','c',
- 'o','m',';',' ','C','N','=','l','o','c','a','l','h','o','s','t',';',' ','O','U',
- '=','W','i','n','e',' ','D','e','v','e','l','o','p','m','e','n','t',';',' ','O',
+ 'E','=','"','a','r','i','c','@','c','o','d','e','w','e','a','v','e','r','s',';','c',
+ 'o','m','"',';',' ','C','N','=','l','o','c','a','l','h','o','s','t',';',' ','O','U',
+ '=','"','W','i','n','e',',','D','e','v','e','l','o','p','m','e','n','t','"',';',' ','O',
  '=','C','o','d','e','W','e','a','v','e','r','s',';',' ','L','=','M','i','n','n',
  'e','a','p','o','l','i','s',';',' ','S','=','M','i','n','n','e','s','o','t','a',
  ';',' ','C','=','U','S',0 };
@@ -399,11 +399,8 @@ static void test_NameToStrConversionW(PCERT_NAME_BLOB pName, DWORD dwStrType,
      sizeof(buffer) / sizeof(buffer[0]));
     ok(i == lstrlenW(expected) + 1, "Expected %d chars, got %d\n",
      lstrlenW(expected) + 1, i);
-    ok(!lstrcmpW(buffer, expected), "Unexpected value\n");
-#ifdef DUMP_STRINGS
-    trace("Expected %s, got %s\n",
+    ok(!lstrcmpW(buffer, expected), "Expected %s, got %s\n",
      wine_dbgstr_w(expected), wine_dbgstr_w(buffer));
-#endif
 }
 
 static void test_CertNameToStrW(void)
-- 
1.5.6



More information about the wine-patches mailing list