aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/sighash_tests.cpp41
1 files changed, 25 insertions, 16 deletions
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<unsigned char> 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<unsigned char> 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);
}
}