Don't crash if we're send a malicious map node from a peer.

This commit is contained in:
JoelKatz
2012-06-30 18:53:11 -07:00
parent ae1e2e071e
commit 30d76c87a3

View File

@@ -630,11 +630,19 @@ SHAMapTreeNode::pointer SHAMap::fetchNodeExternal(const SHAMapNode& id, const ui
throw SHAMapMissingNode(id, hash);
assert(Serializer::getSHA512Half(obj->getData()) == hash);
SHAMapTreeNode::pointer ret = boost::make_shared<SHAMapTreeNode>(id, obj->getData(), mSeq, STN_ARF_PREFIXED);
try
{
SHAMapTreeNode::pointer ret = boost::make_shared<SHAMapTreeNode>(id, obj->getData(), mSeq, STN_ARF_PREFIXED);
#ifdef DEBUG
assert((ret->getNodeHash() == hash) && (id == *ret));
assert((ret->getNodeHash() == hash) && (id == *ret));
#endif
return ret;
return ret;
}
catch (...)
{
Log(lsWARNING) << "fetchNodeExternal gets an invalid node: " << hash.GetHex();
throw SHAMapMissingNode(id, hash);
}
}
void SHAMap::armDirty()