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:51:21 -0400 |
commit | 7cc9b2cde103745e036d256209b7cb3f696fe7af (patch) | |
tree | 58664989337c8da8c77ad91a1dc6c7863d39277f /crypto/ec/ec_ameth.c | |
parent | f05cece6e23ff1737f8cad7f9442dcca25745de1 (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)
(cherry picked from commit 188a9bd950837c70661aa6849894e4e02d129031)
Diffstat (limited to 'crypto/ec/ec_ameth.c')
-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) |