diff options
author | coderrr <coderrr.contact@gmail.com> | 2012-01-02 14:27:41 +0700 |
---|---|---|
committer | coderrr <coderrr.contact@gmail.com> | 2012-01-03 06:24:52 +0700 |
commit | 6ec76ca09efca03236a67db65cbfe44d7c7a878e (patch) | |
tree | a7588c2d89de58240713aa72751cffa422455f87 /src | |
parent | 625b56de6491170ad6a2e45c57d974fca6160750 (diff) |
make sure IsMine only returns true when we own all keys
Diffstat (limited to 'src')
-rw-r--r-- | src/script.cpp | 2 | ||||
-rw-r--r-- | src/test/multisig_tests.cpp | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/script.cpp b/src/script.cpp index f576e14a8b..34872808b3 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -1436,7 +1436,7 @@ bool IsMine(const CKeyStore &keystore, const CScript& scriptPubKey) // them) enable spend-out-from-under-you attacks, especially // in shared-wallet situations. vector<valtype> keys(vSolutions.begin()+1, vSolutions.begin()+vSolutions.size()-1); - return HaveKeys(vSolutions, keystore); + return HaveKeys(keys, keystore) == keys.size(); } } return false; diff --git a/src/test/multisig_tests.cpp b/src/test/multisig_tests.cpp index 742083f3cf..0c2e41aedd 100644 --- a/src/test/multisig_tests.cpp +++ b/src/test/multisig_tests.cpp @@ -174,7 +174,7 @@ BOOST_AUTO_TEST_CASE(multisig_Solver1) // one key that would satisfy an (a|b) or 2-of-3 keys needed // to spend an escrow transaction. // - CBasicKeyStore keystore, emptykeystore; + CBasicKeyStore keystore, emptykeystore, partialkeystore; CKey key[3]; CBitcoinAddress keyaddr[3]; for (int i = 0; i < 3; i++) @@ -183,6 +183,7 @@ BOOST_AUTO_TEST_CASE(multisig_Solver1) keystore.AddKey(key[i]); keyaddr[i].SetPubKey(key[i].GetPubKey()); } + partialkeystore.AddKey(key[0]); { vector<valtype> solutions; @@ -221,6 +222,7 @@ BOOST_AUTO_TEST_CASE(multisig_Solver1) BOOST_CHECK(!ExtractAddress(s, addr)); BOOST_CHECK(IsMine(keystore, s)); BOOST_CHECK(!IsMine(emptykeystore, s)); + BOOST_CHECK(!IsMine(partialkeystore, s)); } { vector<valtype> solutions; @@ -237,6 +239,7 @@ BOOST_AUTO_TEST_CASE(multisig_Solver1) BOOST_CHECK(nRequired = 1); BOOST_CHECK(IsMine(keystore, s)); BOOST_CHECK(!IsMine(emptykeystore, s)); + BOOST_CHECK(!IsMine(partialkeystore, s)); } { vector<valtype> solutions; |