diff --git a/src/libxrpl/shamap/SHAMap.cpp b/src/libxrpl/shamap/SHAMap.cpp index d3a7d49da6..6a9b54eca9 100644 --- a/src/libxrpl/shamap/SHAMap.cpp +++ b/src/libxrpl/shamap/SHAMap.cpp @@ -325,9 +325,6 @@ SHAMap::descend(SHAMapInnerNode& parent, int branch) const return node; node = fetchNode(parent.getChildHash(branch)); - if (!node) - return {}; - node = parent.canonicalizeChild(branch, std::move(node)); return node; } @@ -339,7 +336,7 @@ SHAMap::descendNoStore(SHAMapInnerNode& parent, int branch) const { intr_ptr::SharedPtr ret = parent.getChild(branch); if (!ret && backed_) - ret = fetchNode(parent.getChildHash(branch)); + ret = fetchNodeNT(parent.getChildHash(branch)); return ret; } diff --git a/src/libxrpl/shamap/SHAMapSync.cpp b/src/libxrpl/shamap/SHAMapSync.cpp index cd2654c603..93eb7cd0e7 100644 --- a/src/libxrpl/shamap/SHAMapSync.cpp +++ b/src/libxrpl/shamap/SHAMapSync.cpp @@ -67,6 +67,12 @@ SHAMap::visitNodes(std::function const& function) const if (!node->isEmptyBranch(pos)) { intr_ptr::SharedPtr const child = descendNoStore(*node, pos); + if (!child) + { + // Node was evicted after rotation; skip this subtree. + ++pos; + continue; + } if (!function(*child)) return;