diff --git a/src/SHAMapNodes.cpp b/src/SHAMapNodes.cpp index b8edb5e20f..b7868f98a0 100644 --- a/src/SHAMapNodes.cpp +++ b/src/SHAMapNodes.cpp @@ -217,7 +217,7 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector(u, s.peekData()); @@ -244,7 +244,14 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector(s.getPrefixHash(sHP_TransactionNode), s.peekData()); + if (len < (256 / 8)) + throw std::runtime_error("short TM node"); + uint256 u; + s.get256(u, len - (256 / 8)); + s.chop(256 / 8); + if (u.isZero()) + throw std::runtime_error("invalid TM node"); + mItem = boost::make_shared(u, s.peekData()); mType = tnTRANSACTION_MD; } } @@ -412,6 +419,7 @@ void SHAMapTreeNode::addRaw(Serializer& s, int format) else { mItem->addRaw(s); + mItem->add256(mItem->getTag()); s.add8(4); } }