From 800f094a5476bb95dc56f74f66e2d2e8e7749f78 Mon Sep 17 00:00:00 2001 From: Christian Inci Date: Sat, 9 Apr 2011 21:34:47 +0200 Subject: Fixes a crypt32 str test. (try 3) Try 2: Add handling for CERT_NAME_STR_NO_PLUS_FLAG. Try 3: Added various tests. --- dlls/crypt32/str.c | 5 ++++- dlls/crypt32/tests/str.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c index ae90eb0..24f7c55 100644 --- a/dlls/crypt32/str.c +++ b/dlls/crypt32/str.c @@ -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, diff --git a/dlls/crypt32/tests/str.c b/dlls/crypt32/tests/str.c index 1846ec6..4d69e5c 100644 --- a/dlls/crypt32/tests/str.c +++ b/dlls/crypt32/tests/str.c @@ -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); -- 1.7.4.1