Ignore too-long redeemScripts while loading wallet
This avoids that long redeemScripts that were grandfathered in prevent the wallet from loading. Fixes #4313.
This commit is contained in:
parent
e5ee8f016e
commit
18116b06c1
2 changed files with 17 additions and 1 deletions
|
@ -128,6 +128,22 @@ bool CWallet::AddCScript(const CScript& redeemScript)
|
||||||
return CWalletDB(strWalletFile).WriteCScript(Hash160(redeemScript), redeemScript);
|
return CWalletDB(strWalletFile).WriteCScript(Hash160(redeemScript), redeemScript);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CWallet::LoadCScript(const CScript& redeemScript)
|
||||||
|
{
|
||||||
|
/* A sanity check was added in pull #3843 to avoid adding redeemScripts
|
||||||
|
* that never can be redeemed. However, old wallets may still contain
|
||||||
|
* these. Do not add them to the wallet and warn. */
|
||||||
|
if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE)
|
||||||
|
{
|
||||||
|
std::string strAddr = CBitcoinAddress(redeemScript.GetID()).ToString();
|
||||||
|
LogPrintf("%s: Warning: This wallet contains a redeemScript of size %i which exceeds maximum size %i thus can never be redeemed. Do not use address %s.\n",
|
||||||
|
__func__, redeemScript.size(), MAX_SCRIPT_ELEMENT_SIZE, strAddr);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CCryptoKeyStore::AddCScript(redeemScript);
|
||||||
|
}
|
||||||
|
|
||||||
bool CWallet::Unlock(const SecureString& strWalletPassphrase)
|
bool CWallet::Unlock(const SecureString& strWalletPassphrase)
|
||||||
{
|
{
|
||||||
CCrypter crypter;
|
CCrypter crypter;
|
||||||
|
|
|
@ -211,7 +211,7 @@ public:
|
||||||
// Adds an encrypted key to the store, without saving it to disk (used by LoadWallet)
|
// Adds an encrypted key to the store, without saving it to disk (used by LoadWallet)
|
||||||
bool LoadCryptedKey(const CPubKey &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
|
bool LoadCryptedKey(const CPubKey &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
|
||||||
bool AddCScript(const CScript& redeemScript);
|
bool AddCScript(const CScript& redeemScript);
|
||||||
bool LoadCScript(const CScript& redeemScript) { return CCryptoKeyStore::AddCScript(redeemScript); }
|
bool LoadCScript(const CScript& redeemScript);
|
||||||
|
|
||||||
/// Adds a destination data tuple to the store, and saves it to disk
|
/// Adds a destination data tuple to the store, and saves it to disk
|
||||||
bool AddDestData(const CTxDestination &dest, const std::string &key, const std::string &value);
|
bool AddDestData(const CTxDestination &dest, const std::string &key, const std::string &value);
|
||||||
|
|
Loading…
Reference in a new issue