diff --git a/libethcore/BlockInfo.cpp b/libethcore/BlockInfo.cpp index fec010c2d..ce158c3cc 100644 --- a/libethcore/BlockInfo.cpp +++ b/libethcore/BlockInfo.cpp @@ -134,7 +134,7 @@ void BlockInfo::populate(bytesConstRef _block, bool _checkNonce) RLP header = root[0]; if (!header.isList()) - BOOST_THROW_EXCEPTION(InvalidBlockFormat(0,header.data()) << errinfo_comment("block header needs to be a list")); + BOOST_THROW_EXCEPTION(InvalidBlockFormat(0, header.data()) << errinfo_comment("block header needs to be a list")); populateFromHeader(header, _checkNonce); if (!root[1].isList()) diff --git a/libethereum/BlockChain.cpp b/libethereum/BlockChain.cpp index 29095076f..293a9d757 100644 --- a/libethereum/BlockChain.cpp +++ b/libethereum/BlockChain.cpp @@ -209,6 +209,11 @@ h256s BlockChain::import(bytes const& _block, OverlayDB const& _db) try #endif { + RLP blockRLP(_block); + + if (!blockRLP.isList()) + BOOST_THROW_EXCEPTION(InvalidBlockFormat(0,blockRLP.data()) << errinfo_comment("block header needs to be a list")); + bi.populate(&_block); bi.verifyInternals(&_block); } diff --git a/libethereum/Transaction.cpp b/libethereum/Transaction.cpp index 96689326d..a89083648 100644 --- a/libethereum/Transaction.cpp +++ b/libethereum/Transaction.cpp @@ -36,6 +36,9 @@ Transaction::Transaction(bytesConstRef _rlpData, CheckSignature _checkSig) RLP rlp(_rlpData); try { + if (!rlp.isList()) + BOOST_THROW_EXCEPTION(BadRLP() << errinfo_comment("transaction RLP must be a list")); + m_nonce = rlp[field = 0].toInt(); m_gasPrice = rlp[field = 1].toInt(); m_gas = rlp[field = 2].toInt();