From 98705aa51cbfee81ecd2498a014c285ac677ba69 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Sun, 19 Jun 2011 18:32:36 +0200 Subject: [PATCH] Bugfixes walletclass Some problems found by ius: * compiler complains with no return after critical section block * CKeyStore::GetPrivKey(key) was undefined for unknown key * missing return statement in GetChange() --- src/keystore.h | 8 ++++++-- src/script.cpp | 10 ++++++---- src/wallet.cpp | 2 +- src/wallet.h | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/keystore.h b/src/keystore.h index 3b6869b..6080d7d 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -14,11 +14,15 @@ public: { return (mapKeys.count(vchPubKey) > 0); } - CPrivKey GetPrivKey(const std::vector &vchPubKey) const + bool GetPrivKey(const std::vector &vchPubKey, CPrivKey& keyOut) const { std::map, CPrivKey>::const_iterator mi = mapKeys.find(vchPubKey); if (mi != mapKeys.end()) - return (*mi).second; + { + keyOut = (*mi).second; + return true; + } + return false; } std::vector GenerateNewKey(); }; diff --git a/src/script.cpp b/src/script.cpp index e1b5ae8..bd1b5b3 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -1038,12 +1038,13 @@ bool Solver(const CKeyStore& keystore, const CScript& scriptPubKey, uint256 hash { // Sign const valtype& vchPubKey = item.second; - if (!keystore.HaveKey(vchPubKey)) + CPrivKey privkey; + if (!keystore.GetPrivKey(vchPubKey, privkey)) return false; if (hash != 0) { vector vchSig; - if (!CKey::Sign(keystore.GetPrivKey(vchPubKey), hash, vchSig)) + if (!CKey::Sign(privkey, hash, vchSig)) return false; vchSig.push_back((unsigned char)nHashType); scriptSigRet << vchSig; @@ -1056,12 +1057,13 @@ bool Solver(const CKeyStore& keystore, const CScript& scriptPubKey, uint256 hash if (mi == mapPubKeys.end()) return false; const vector& vchPubKey = (*mi).second; - if (!keystore.HaveKey(vchPubKey)) + CPrivKey privkey; + if (!keystore.GetPrivKey(vchPubKey, privkey)) return false; if (hash != 0) { vector vchSig; - if (!CKey::Sign(keystore.GetPrivKey(vchPubKey), hash, vchSig)) + if (!CKey::Sign(privkey, hash, vchSig)) return false; vchSig.push_back((unsigned char)nHashType); scriptSigRet << vchSig << vchPubKey; diff --git a/src/wallet.cpp b/src/wallet.cpp index 7a65b2a..b06187a 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -1006,8 +1006,8 @@ bool CWallet::GetTransaction(const uint256 &hashTx, CWalletTx& wtx) wtx = (*mi).second; return true; } - return false; } + return false; } bool GetWalletFile(CWallet* pwallet, string &strWalletFileOut) diff --git a/src/wallet.h b/src/wallet.h index b14a2e8..cda4293 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -96,7 +96,7 @@ public: { if (!MoneyRange(txout.nValue)) throw std::runtime_error("CWallet::GetChange() : value out of range"); - if (IsChange(txout) ? txout.nValue : 0); + return (IsChange(txout) ? txout.nValue : 0); } bool IsMine(const CTransaction& tx) const { -- 1.7.1