From f5425bbfebd53157a5908b76586cb8fe793a1d53 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 21 Apr 2013 17:08:02 -0700 Subject: [PATCH] Bug fixes to hasNode/getFetchPack. --- src/cpp/ripple/SHAMapSync.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index c18b160d9..085c9aec7 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -475,6 +475,8 @@ bool SHAMap::hasNode(const SHAMapNode& nodeID, const uint256& nodeHash) while (node->isInner() && (node->getDepth() <= nodeID.getDepth())) { int branch = node->selectBranch(nodeID.getNodeID()); + if (node->isEmptyBranch(branch)) + break; node = getNodePointer(node->getChildNodeID(branch), node->getChildHash(branch)); } return node->getNodeHash() == nodeHash; @@ -486,7 +488,7 @@ std::list SHAMap::getFetchPack(SHAMap* prior, bool inc if (root->isLeaf()) { - if (includeLeaves && + if (includeLeaves && !root->getNodeHash().isZero() && (!prior || !prior->hasNode(*root, root->getNodeHash()))) { Serializer s; @@ -495,6 +497,10 @@ std::list SHAMap::getFetchPack(SHAMap* prior, bool inc } return ret; } + + if (root->getNodeHash().isZero()) + return ret; + if (prior && (root->getNodeHash() == prior->root->getNodeHash())) return ret;