From 2ec46c0dbf400e376e12ffeb783a086055420412 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 31 May 2012 20:55:30 -0700 Subject: [PATCH] Bugfixes. --- src/LedgerConsensus.cpp | 30 +++++++++++++++++++----------- src/NetworkOPs.cpp | 2 +- src/SHAMapNodes.cpp | 1 + 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/LedgerConsensus.cpp b/src/LedgerConsensus.cpp index 26330beff6..ddfa2e1957 100644 --- a/src/LedgerConsensus.cpp +++ b/src/LedgerConsensus.cpp @@ -79,22 +79,30 @@ bool TransactionAcquire::takeNodes(const std::list& nodeIDs, return true; if (mFailed) return false; - std::list::const_iterator nodeIDit = nodeIDs.begin(); - std::list< std::vector >::const_iterator nodeDatait = data.begin(); - while (nodeIDit != nodeIDs.end()) + try { - if (nodeIDit->isRoot()) + std::list::const_iterator nodeIDit = nodeIDs.begin(); + std::list< std::vector >::const_iterator nodeDatait = data.begin(); + while (nodeIDit != nodeIDs.end()) { - if (!mMap->addRootNode(getHash(), *nodeDatait)) + if (nodeIDit->isRoot()) + { + if (!mMap->addRootNode(getHash(), *nodeDatait)) + return false; + } + else if (!mMap->addKnownNode(*nodeIDit, *nodeDatait)) return false; + ++nodeIDit; + ++nodeDatait; } - else if (!mMap->addKnownNode(*nodeIDit, *nodeDatait)) - return false; - ++nodeIDit; - ++nodeDatait; + trigger(peer); + return true; + } + catch (...) + { + Log(lsERROR) << "Peer sends us junky transaction node data"; + return false; } - trigger(peer); - return true; } void LCTransaction::setVote(const uint256& peer, bool votesYes) diff --git a/src/NetworkOPs.cpp b/src/NetworkOPs.cpp index 5e855f457f..bb40cd09f7 100644 --- a/src/NetworkOPs.cpp +++ b/src/NetworkOPs.cpp @@ -440,7 +440,7 @@ bool NetworkOPs::recvPropose(const uint256& prevLgr, uint32 proposeSeq, const ui const std::string& pubKey, const std::string& signature) { if (mMode != omFULL) // FIXME: Should we relay? - Log(lsWARNING) << "Received proposal when not full" << mMode; + Log(lsWARNING) << "Received proposal when not full: " << mMode; if (!mConsensus) { return true; diff --git a/src/SHAMapNodes.cpp b/src/SHAMapNodes.cpp index 42ff2a92ff..acd27eb271 100644 --- a/src/SHAMapNodes.cpp +++ b/src/SHAMapNodes.cpp @@ -196,6 +196,7 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector 3)) throw SHAMapException(InvalidNode); + assert(len >= 33); if (type == 0) { // transaction