Commit 6aa0ba4b authored by Richard Levitte's avatar Richard Levitte
Browse files

Fix a possible memleak



If there's a failure allocating md_data, the destination pctx will have
a shared pointer with the source EVP_MD_CTX, which will lead to problems
when either the source or the destination is freed.

Reviewed-by: default avatarStephen Henson <steve@openssl.org>
parent 4fa52141
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -312,6 +312,13 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in)
    EVP_MD_CTX_reset(out);
    memcpy(out, in, sizeof(*out));

    /* Null these variables, since they are getting fixed up
     * properly below.  Anything else may cause a memleak and/or
     * double free if any of the memory allocations below fail
     */
    out->md_data = NULL;
    out->pctx = NULL;

    if (in->md_data && out->digest->ctx_size) {
        if (tmp_buf)
            out->md_data = tmp_buf;