From e5256d98407d95af08758f39ce2a632f8c2e8d00 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 21 May 2007 02:25:48 +0200 Subject: [PATCH] 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(+) diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c index a38d06cdfcf..13ac320428a 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 c9f7a0ace42..25008be0cf3 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);