crypt32: Fix a string test.
authorChristian Inci <chris.pcguy.inci@gmail.com>
Sat, 9 Apr 2011 19:34:47 +0000 (21:34 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 11 Apr 2011 17:31:40 +0000 (19:31 +0200)
dlls/crypt32/str.c
dlls/crypt32/tests/str.c

index ae90eb0def3e82fa611b545e9c6c35b58129563f..24f7c55ee83ce7e43c3290e956f2fcb3ff69270a 100644 (file)
@@ -1074,7 +1074,8 @@ BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500,
                     static const WCHAR commaSep[] = { ',',0 };
                     static const WCHAR semiSep[] = { ';',0 };
                     static const WCHAR crlfSep[] = { '\r','\n',0 };
-                    static const WCHAR allSeps[] = { ',',';','\r','\n',0 };
+                    static const WCHAR allSepsWithoutPlus[] = { ',',';','\r','\n',0 };
+                    static const WCHAR allSeps[] = { '+',',',';','\r','\n',0 };
                     LPCWSTR sep;
 
                     str++;
@@ -1084,6 +1085,8 @@ BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500,
                         sep = semiSep;
                     else if (dwStrType & CERT_NAME_STR_CRLF_FLAG)
                         sep = crlfSep;
+                    else if (dwStrType & CERT_NAME_STR_NO_PLUS_FLAG)
+                        sep = allSepsWithoutPlus;
                     else
                         sep = allSeps;
                     ret = CRYPT_GetNextValueW(str, dwStrType, sep, &token,
index 1846ec65b457fec6985bb6771ba2c388548c0aed..4d69e5cdc4eda298695723248bd42c2f3ed9908d 100644 (file)
@@ -800,8 +800,36 @@ static void test_CertStrToNameA(void)
      "Expected CRYPT_E_INVALID_X500_STRING, got %08x\n", GetLastError());
     ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=1+2", 0, NULL, buf,
      &size, NULL);
-    todo_wine ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
+    ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
      "Expected CRYPT_E_INVALID_X500_STRING, got %08x\n", GetLastError());
+    ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=1+2", CERT_NAME_STR_NO_PLUS_FLAG, NULL, buf,
+                          &size, NULL);
+    ok(ret && GetLastError() == ERROR_SUCCESS,
+                 "Expected ERROR_SUCCESS, got %08x\n", GetLastError());
+    ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=1,2", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
+                          &size, NULL);
+    ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
+                 "Expected CRYPT_E_INVALID_X500_STRING, got %08x\n", GetLastError());
+    ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=\"1,2;3,4\"", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
+                          &size, NULL);
+    ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
+                 "Expected CRYPT_E_INVALID_X500_STRING, got %08x\n", GetLastError());
+    ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=abc", 0, NULL, buf,
+                          &size, NULL);
+    ok(ret && GetLastError() == ERROR_SUCCESS,
+                 "Expected ERROR_SUCCESS, got %08x\n", GetLastError());
+    ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=abc", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
+                          &size, NULL);
+    ok(ret && GetLastError() == ERROR_SUCCESS,
+                 "Expected ERROR_SUCCESS, got %08x\n", GetLastError());
+    ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=\"abc\"", 0, NULL, buf,
+                          &size, NULL);
+    ok(ret && GetLastError() == ERROR_SUCCESS,
+                 "Expected ERROR_SUCCESS, got %08x\n", GetLastError());
+    ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=\"abc\"", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
+                          &size, NULL);
+    todo_wine ok(!ret && GetLastError() == ERROR_MORE_DATA,
+                 "Expected ERROR_MORE_DATA, got %08x\n", GetLastError());
     for (i = 0; i < sizeof(namesA) / sizeof(namesA[0]); i++)
     {
         size = sizeof(buf);