Module: wine Branch: master Commit: e5256d98407d95af08758f39ce2a632f8c2e8d00 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e5256d98407d95af08758f39ce...
Author: Mounir IDRASSI mounir.idrassi@idrix.fr Date: Mon May 21 02:25:48 2007 +0200
crypt32: Fix CertAddCertificateContextToStore when called with CERT_STORE_ADD_USE_EXISTING.
---
dlls/crypt32/store.c | 5 +++++ dlls/crypt32/tests/cert.c | 10 ++++++++++ 2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c index a38d06c..13ac320 100644 --- a/dlls/crypt32/store.c +++ b/dlls/crypt32/store.c @@ -2160,7 +2160,12 @@ BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, break; case CERT_STORE_ADD_USE_EXISTING: if (existing) + { CertContext_CopyProperties(existing, pCertContext); + *ppStoreContext = CertDuplicateCertificateContext(existing); + } + else + toAdd = CertDuplicateCertificateContext(pCertContext); break; default: FIXME("Unimplemented add disposition %d\n", dwAddDisposition); diff --git a/dlls/crypt32/tests/cert.c b/dlls/crypt32/tests/cert.c index c9f7a0a..25008be 100644 --- a/dlls/crypt32/tests/cert.c +++ b/dlls/crypt32/tests/cert.c @@ -134,6 +134,7 @@ static void testAddCert(void) HCERTSTORE store; HCERTSTORE collection; PCCERT_CONTEXT context; + PCCERT_CONTEXT copyContext; BOOL ret;
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, @@ -274,6 +275,15 @@ static void testAddCert(void) CERT_STORE_ADD_REPLACE_EXISTING, NULL); ok(ret, "CertAddCertificateContextToStore failed: %08x\n", GetLastError()); + /* use the existing certificate and ask for a copy of the context*/ + copyContext = NULL; + ret = CertAddCertificateContextToStore(collection, context, + CERT_STORE_ADD_USE_EXISTING, ©Context); + ok(ret, "CertAddCertificateContextToStore failed: %08x\n", + GetLastError()); + ok(copyContext != NULL, "Expected on output a non NULL copyContext\n"); + if (copyContext) + CertFreeCertificateContext(copyContext); /* but adding a new certificate isn't allowed. */ ret = CertAddCertificateContextToStore(collection, context, CERT_STORE_ADD_ALWAYS, NULL);