Mounir IDRASSI : crypt32: Fix CertAddCertificateContextToStore when called with CERT_STORE_ADD_USE_EXISTING .

Alexandre Julliard julliard at wine.codeweavers.com
Mon May 21 09:40:20 CDT 2007


Module: wine
Branch: master
Commit: e5256d98407d95af08758f39ce2a632f8c2e8d00
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e5256d98407d95af08758f39ce2a632f8c2e8d00

Author: Mounir IDRASSI <mounir.idrassi at 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, &copyContext);
+            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);




More information about the wine-cvs mailing list