Module: wine Branch: master Commit: 8d4d7b267de514c3c72820faa31c3403a4a488cf URL: http://source.winehq.org/git/wine.git/?a=commit;h=8d4d7b267de514c3c72820faa3... Author: Michael Karcher <wine(a)mkarcher.dialup.fu-berlin.de> Date: Sun May 25 19:23:44 2008 +0200 crypt32: CertGetPublicKeyLength should check only cert encoding type. pktextract calls CertGetPublicKeyLength with dwCertEncodingType of X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, MSDN explicitly allows it. --- dlls/crypt32/cert.c | 2 +- dlls/crypt32/tests/cert.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletions(-) diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c index 41d3998..b916ce3 100644 --- a/dlls/crypt32/cert.c +++ b/dlls/crypt32/cert.c @@ -809,7 +809,7 @@ DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType, TRACE("(%08x, %p)\n", dwCertEncodingType, pPublicKey); - if (dwCertEncodingType != X509_ASN_ENCODING) + if (GET_CERT_ENCODING_TYPE(dwCertEncodingType) != X509_ASN_ENCODING) { SetLastError(ERROR_FILE_NOT_FOUND); return 0; diff --git a/dlls/crypt32/tests/cert.c b/dlls/crypt32/tests/cert.c index 3fce85e..64aba83 100644 --- a/dlls/crypt32/tests/cert.c +++ b/dlls/crypt32/tests/cert.c @@ -2958,6 +2958,11 @@ static void testGetPublicKeyLength(void) SetLastError(0xdeadbeef); ret = CertGetPublicKeyLength(X509_ASN_ENCODING, &info); ok(ret == 56, "Expected length 56, got %d\n", ret); + /* With the RSA OID and a message encoding */ + info.Algorithm.pszObjId = oid_rsa_rsa; + SetLastError(0xdeadbeef); + ret = CertGetPublicKeyLength(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &info); + ok(ret == 56, "Expected length 56, got %d\n", ret); } START_TEST(cert)