From 81bfb5aebf983f999d3de12ca4adf8cd4c4a8ae0 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Mon, 31 Mar 2014 15:07:46 -0300 Subject: add checks for deserialization errors --- src/test/sighash_tests.cpp | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) (limited to 'src/test') diff --git a/src/test/sighash_tests.cpp b/src/test/sighash_tests.cpp index 9985ad6928..353fd60f7b 100644 --- a/src/test/sighash_tests.cpp +++ b/src/test/sighash_tests.cpp @@ -177,27 +177,36 @@ BOOST_AUTO_TEST_CASE(sighash_from_data) } if (test.size() == 1) continue; // comment - std::string raw_tx = test[0].get_str(); - std::string raw_script = test[1].get_str(); - int nIn = test[2].get_int(); - int nHashType = test[3].get_int(); - std::string sigHashHex = test[4].get_str(); - + std::string raw_tx, raw_script, sigHashHex; + int nIn, nHashType; uint256 sh; - CDataStream stream(ParseHex(raw_tx), SER_NETWORK, PROTOCOL_VERSION); CTransaction tx; - stream >> tx; - - CValidationState state; - BOOST_CHECK_MESSAGE(CheckTransaction(tx, state), strTest); - BOOST_CHECK(state.IsValid()); - CScript scriptCode = CScript(); - std::vector raw = ParseHex(raw_script); - scriptCode.insert(scriptCode.end(), raw.begin(), raw.end()); + try { + // deserialize test data + raw_tx = test[0].get_str(); + raw_script = test[1].get_str(); + nIn = test[2].get_int(); + nHashType = test[3].get_int(); + sigHashHex = test[4].get_str(); + + uint256 sh; + CDataStream stream(ParseHex(raw_tx), SER_NETWORK, PROTOCOL_VERSION); + stream >> tx; + + CValidationState state; + BOOST_CHECK_MESSAGE(CheckTransaction(tx, state), strTest); + BOOST_CHECK(state.IsValid()); + + std::vector raw = ParseHex(raw_script); + scriptCode.insert(scriptCode.end(), raw.begin(), raw.end()); + } catch (...) { + BOOST_ERROR("Bad test, couldn't deserialize data: " << strTest); + continue; + } + sh = SignatureHash(scriptCode, tx, nIn, nHashType); - BOOST_CHECK_MESSAGE(sh.GetHex() == sigHashHex, strTest); } } -- cgit v1.2.3