add checks for deserialization errors
This commit is contained in:
parent
232aa9e034
commit
81bfb5aebf
1 changed files with 25 additions and 16 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue