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: Stephen Henson <steve@openssl.org>
This commit is contained in:
parent
4fa52141b0
commit
6aa0ba4bb2
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user