From: Remi Gacogne Date: Mon, 3 Sep 2018 07:43:45 +0000 (+0200) Subject: Release memory in case of error in the OpenSSL ECDSA constructor X-Git-Tag: dnsdist-1.3.3~119^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F6917%2Fhead;p=thirdparty%2Fpdns.git Release memory in case of error in the OpenSSL ECDSA constructor The current code will only fail to release the allocated memory if called with an invalid algorithm, which won't happen, or if a memory allocation fails in which case this might not matter much. Still, it's cleaner to release the memory properly and might avoid mistakes later if we look at this code while implementing a new crypto backend. --- diff --git a/pdns/opensslsigners.cc b/pdns/opensslsigners.cc index daff5a5384..6a2e856940 100644 --- a/pdns/opensslsigners.cc +++ b/pdns/opensslsigners.cc @@ -616,14 +616,19 @@ public: d_ecgroup = EC_GROUP_new_by_curve_name(NID_secp384r1); d_len = 48; } else { + EC_KEY_free(d_eckey); throw runtime_error(getName()+" unknown algorithm "+std::to_string(d_algorithm)); } + if (d_ecgroup == NULL) { + EC_KEY_free(d_eckey); throw runtime_error(getName()+" allocation of group structure failed"); } - ret = EC_KEY_set_group(d_eckey,d_ecgroup); + ret = EC_KEY_set_group(d_eckey, d_ecgroup); if (ret != 1) { + EC_KEY_free(d_eckey); + EC_GROUP_free(d_ecgroup); throw runtime_error(getName()+" setting key group failed"); }