Fix #650: CKey::SetSecret BIGNUM leak
authorPieter Wuille <pieter.wuille@gmail.com>
Sun, 19 Feb 2012 17:44:51 +0000 (18:44 +0100)
committerPieter Wuille <pieter.wuille@gmail.com>
Sun, 19 Feb 2012 17:45:56 +0000 (18:45 +0100)
src/key.h

index 9e92897..a57143b 100644 (file)
--- a/src/key.h
+++ b/src/key.h
@@ -141,10 +141,13 @@ public:
         if (vchSecret.size() != 32)
             throw key_error("CKey::SetSecret() : secret must be 32 bytes");
         BIGNUM *bn = BN_bin2bn(&vchSecret[0],32,BN_new());
-        if (bn == NULL) 
+        if (bn == NULL)
             throw key_error("CKey::SetSecret() : BN_bin2bn failed");
         if (!EC_KEY_regenerate_key(pkey,bn))
+        {
+            BN_clear_free(bn);
             throw key_error("CKey::SetSecret() : EC_KEY_regenerate_key failed");
+        }
         BN_clear_free(bn);
         fSet = true;
         if (fCompressed || fCompressedPubKey)