Jacek Caban : crypt32: Return context_t from Context_CreateDataContext.

Alexandre Julliard julliard at winehq.org
Mon Oct 21 14:58:26 CDT 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Oct 21 15:58:56 2013 +0200

crypt32: Return context_t from Context_CreateDataContext.

---

 dlls/crypt32/cert.c            |   48 ++++++++++++++++++---------------------
 dlls/crypt32/context.c         |    4 +-
 dlls/crypt32/crl.c             |   49 ++++++++++++++++++---------------------
 dlls/crypt32/crypt32_private.h |    2 +-
 dlls/crypt32/ctl.c             |   26 +++++++++++---------
 5 files changed, 62 insertions(+), 67 deletions(-)

diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c
index f2889f9..f23629b 100644
--- a/dlls/crypt32/cert.c
+++ b/dlls/crypt32/cert.c
@@ -129,14 +129,12 @@ static context_t *Cert_clone(context_t *context, WINECRYPT_CERTSTORE *store, BOO
             return NULL;
     }else {
         const cert_t *cloned = (const cert_t*)context;
-        void *new_context;
         DWORD size = 0;
         BOOL res;
 
-        new_context = Context_CreateDataContext(sizeof(CERT_CONTEXT), &cert_vtbl, store);
-        if(!new_context)
+        cert = (cert_t*)Context_CreateDataContext(sizeof(CERT_CONTEXT), &cert_vtbl, store);
+        if(!cert)
             return NULL;
-        cert = cert_from_ptr(new_context);
 
         Context_CopyProperties(&cert->ctx, &cloned->ctx);
 
@@ -312,7 +310,8 @@ BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,
 PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
  const BYTE *pbCertEncoded, DWORD cbCertEncoded)
 {
-    PCERT_CONTEXT cert = NULL;
+    cert_t *cert = NULL;
+    BYTE *data = NULL;
     BOOL ret;
     PCERT_INFO certInfo = NULL;
     DWORD size = 0;
@@ -329,30 +328,27 @@ PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
     ret = CryptDecodeObjectEx(dwCertEncodingType, X509_CERT_TO_BE_SIGNED,
      pbCertEncoded, cbCertEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
      &certInfo, &size);
-    if (ret)
-    {
-        BYTE *data = NULL;
+    if (!ret)
+        return NULL;
 
-        cert = Context_CreateDataContext(sizeof(CERT_CONTEXT), &cert_vtbl, &empty_store);
-        if (!cert)
-            goto end;
-        data = CryptMemAlloc(cbCertEncoded);
-        if (!data)
-        {
-            CertFreeCertificateContext(cert);
-            cert = NULL;
-            goto end;
-        }
-        memcpy(data, pbCertEncoded, cbCertEncoded);
-        cert->dwCertEncodingType = dwCertEncodingType;
-        cert->pbCertEncoded      = data;
-        cert->cbCertEncoded      = cbCertEncoded;
-        cert->pCertInfo          = certInfo;
-        cert->hCertStore         = &empty_store;
+    cert = (cert_t*)Context_CreateDataContext(sizeof(CERT_CONTEXT), &cert_vtbl, &empty_store);
+    if (!cert)
+        return NULL;
+    data = CryptMemAlloc(cbCertEncoded);
+    if (!data)
+    {
+        Context_Release(&cert->base);
+        return NULL;
     }
 
-end:
-    return cert;
+    memcpy(data, pbCertEncoded, cbCertEncoded);
+    cert->ctx.dwCertEncodingType = dwCertEncodingType;
+    cert->ctx.pbCertEncoded      = data;
+    cert->ctx.cbCertEncoded      = cbCertEncoded;
+    cert->ctx.pCertInfo          = certInfo;
+    cert->ctx.hCertStore         = &empty_store;
+
+    return &cert->ctx;
 }
 
 PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext)
diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c
index 6dc46c2..9c26439 100644
--- a/dlls/crypt32/context.c
+++ b/dlls/crypt32/context.c
@@ -25,7 +25,7 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(context);
 
-void *Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl, WINECRYPT_CERTSTORE *store)
+context_t *Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl, WINECRYPT_CERTSTORE *store)
 {
     context_t *context;
 
@@ -48,7 +48,7 @@ void *Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl,
     context->store = store;
 
     TRACE("returning %p\n", context);
-    return context_ptr(context);
+    return context;
 }
 
 context_t *Context_CreateLinkContext(unsigned int contextSize, context_t *linked, WINECRYPT_CERTSTORE *store)
diff --git a/dlls/crypt32/crl.c b/dlls/crypt32/crl.c
index 8eb587a..07e86b2 100644
--- a/dlls/crypt32/crl.c
+++ b/dlls/crypt32/crl.c
@@ -49,14 +49,12 @@ static context_t *CRL_clone(context_t *context, WINECRYPT_CERTSTORE *store, BOOL
             return NULL;
     }else {
         const crl_t *cloned = (const crl_t*)context;
-        void *new_context;
         DWORD size = 0;
         BOOL res;
 
-        new_context = Context_CreateDataContext(sizeof(CRL_CONTEXT), &crl_vtbl, store);
-        if(!new_context)
+        crl = (crl_t*)Context_CreateDataContext(sizeof(CRL_CONTEXT), &crl_vtbl, store);
+        if(!crl)
             return NULL;
-        crl = crl_from_ptr(new_context);
 
         Context_CopyProperties(&crl->ctx, &cloned->ctx);
 
@@ -87,9 +85,10 @@ static const context_vtbl_t crl_vtbl = {
 PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType,
  const BYTE* pbCrlEncoded, DWORD cbCrlEncoded)
 {
-    PCRL_CONTEXT crl = NULL;
+    crl_t *crl = NULL;
     BOOL ret;
     PCRL_INFO crlInfo = NULL;
+    BYTE *data = NULL;
     DWORD size = 0;
 
     TRACE("(%08x, %p, %d)\n", dwCertEncodingType, pbCrlEncoded,
@@ -103,30 +102,28 @@ PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType,
     ret = CryptDecodeObjectEx(dwCertEncodingType, X509_CERT_CRL_TO_BE_SIGNED,
      pbCrlEncoded, cbCrlEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
      &crlInfo, &size);
-    if (ret)
-    {
-        BYTE *data = NULL;
+    if (!ret)
+        return NULL;
 
-        crl = Context_CreateDataContext(sizeof(CRL_CONTEXT), &crl_vtbl, &empty_store);
-        if (!crl)
-            goto end;
-        data = CryptMemAlloc(cbCrlEncoded);
-        if (!data)
-        {
-            CertFreeCRLContext(crl);
-            crl = NULL;
-            goto end;
-        }
-        memcpy(data, pbCrlEncoded, cbCrlEncoded);
-        crl->dwCertEncodingType = dwCertEncodingType;
-        crl->pbCrlEncoded       = data;
-        crl->cbCrlEncoded       = cbCrlEncoded;
-        crl->pCrlInfo           = crlInfo;
-        crl->hCertStore         = &empty_store;
+    crl = (crl_t*)Context_CreateDataContext(sizeof(CRL_CONTEXT), &crl_vtbl, &empty_store);
+    if (!crl)
+        return NULL;
+
+    data = CryptMemAlloc(cbCrlEncoded);
+    if (!data)
+    {
+        Context_Release(&crl->base);
+        return NULL;
     }
 
-end:
-    return crl;
+    memcpy(data, pbCrlEncoded, cbCrlEncoded);
+    crl->ctx.dwCertEncodingType = dwCertEncodingType;
+    crl->ctx.pbCrlEncoded       = data;
+    crl->ctx.cbCrlEncoded       = cbCrlEncoded;
+    crl->ctx.pCrlInfo           = crlInfo;
+    crl->ctx.hCertStore         = &empty_store;
+
+    return &crl->ctx;
 }
 
 BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index 2dbc1ce..53e0834 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -389,7 +389,7 @@ DWORD cert_name_to_str_with_indent(DWORD dwCertEncodingType, DWORD indent,
  * which should be one of CERT_CONTEXT, CRL_CONTEXT, or CTL_CONTEXT.
  * Free with Context_Release.
  */
-void *Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl, struct WINE_CRYPTCERTSTORE*) DECLSPEC_HIDDEN;
+context_t *Context_CreateDataContext(size_t contextSize, const context_vtbl_t *vtbl, struct WINE_CRYPTCERTSTORE*) DECLSPEC_HIDDEN;
 
 /* Creates a new link context.  The context refers to linked
  * rather than owning its own properties.  If addRef is TRUE (which ordinarily
diff --git a/dlls/crypt32/ctl.c b/dlls/crypt32/ctl.c
index 7a8c21f..6893e2d 100644
--- a/dlls/crypt32/ctl.c
+++ b/dlls/crypt32/ctl.c
@@ -367,7 +367,7 @@ BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext)
 PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
  const BYTE *pbCtlEncoded, DWORD cbCtlEncoded)
 {
-    PCTL_CONTEXT ctl = NULL;
+    ctl_t *ctl = NULL;
     HCRYPTMSG msg;
     BOOL ret;
     BYTE *content = NULL;
@@ -440,7 +440,7 @@ PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
              &ctlInfo, &size);
             if (ret)
             {
-                ctl = Context_CreateDataContext(sizeof(CTL_CONTEXT), &ctl_vtbl, &empty_store);
+                ctl = (ctl_t*)Context_CreateDataContext(sizeof(CTL_CONTEXT), &ctl_vtbl, &empty_store);
                 if (ctl)
                 {
                     BYTE *data = CryptMemAlloc(cbCtlEncoded);
@@ -448,15 +448,15 @@ PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
                     if (data)
                     {
                         memcpy(data, pbCtlEncoded, cbCtlEncoded);
-                        ctl->dwMsgAndCertEncodingType =
+                        ctl->ctx.dwMsgAndCertEncodingType =
                          X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
-                        ctl->pbCtlEncoded             = data;
-                        ctl->cbCtlEncoded             = cbCtlEncoded;
-                        ctl->pCtlInfo                 = ctlInfo;
-                        ctl->hCertStore               = &empty_store;
-                        ctl->hCryptMsg                = msg;
-                        ctl->pbCtlContext             = content;
-                        ctl->cbCtlContext             = contentSize;
+                        ctl->ctx.pbCtlEncoded             = data;
+                        ctl->ctx.cbCtlEncoded             = cbCtlEncoded;
+                        ctl->ctx.pCtlInfo                 = ctlInfo;
+                        ctl->ctx.hCertStore               = &empty_store;
+                        ctl->ctx.hCryptMsg                = msg;
+                        ctl->ctx.pbCtlContext             = content;
+                        ctl->ctx.cbCtlContext             = contentSize;
                     }
                     else
                     {
@@ -481,13 +481,15 @@ PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
 end:
     if (!ret)
     {
-        CertFreeCTLContext(ctl);
+        if(ctl)
+            Context_Release(&ctl->base);
         ctl = NULL;
         LocalFree(ctlInfo);
         CryptMemFree(content);
         CryptMsgClose(msg);
+        return NULL;
     }
-    return ctl;
+    return &ctl->ctx;
 }
 
 PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext)




More information about the wine-cvs mailing list