diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2017-06-13 07:22:50 +0200 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2017-06-13 13:27:25 -0400 |
commit | 188a9bd950837c70661aa6849894e4e02d129031 (patch) | |
tree | d5c73d701bdd8677ad821f606252f7d7bdee7e77 /crypto/ec | |
parent | 150d0478a41e592e1aced6b392db4195eb6191f9 (diff) |
Fix a memleak in ec_copy_parameters.
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3666)
Diffstat (limited to 'crypto/ec')
-rw-r--r-- | crypto/ec/ec_ameth.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/crypto/ec/ec_ameth.c b/crypto/ec/ec_ameth.c index fa5bd0318c..b66adf2bbc 100644 --- a/crypto/ec/ec_ameth.c +++ b/crypto/ec/ec_ameth.c @@ -298,17 +298,21 @@ static int ec_missing_parameters(const EVP_PKEY *pkey) static int ec_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from) { EC_GROUP *group = EC_GROUP_dup(EC_KEY_get0_group(from->pkey.ec)); + if (group == NULL) return 0; if (to->pkey.ec == NULL) { to->pkey.ec = EC_KEY_new(); if (to->pkey.ec == NULL) - return 0; + goto err; } if (EC_KEY_set_group(to->pkey.ec, group) == 0) - return 0; + goto err; EC_GROUP_free(group); return 1; + err: + EC_GROUP_free(group); + return 0; } static int ec_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) |