mirror of
https://github.com/XRPLF/rippled.git
synced 2026-09-27 15:28:03 +00:00
A walk that reaches a position only a leaf may occupy now marks the map Invalid and abandons the descent instead of continuing: SHAMapNodeID::getChildNodeID() throws past kLeafDepth, uncaught, all the way to std::terminate(). It's reachable without going through addKnownNode() at all - InboundLedgers::gotStaleData() stores any parseable node from an unsolicited liAS_NODE reply into the fetch pack by its own hash with no relatedness check - making this a conditioned remote denial of service, not just a single bad packet. As in addKnownNode(), the depth check runs before the full-below cache lookup, for the same cache-doesn't-cover-depth reason. Callers must re-check isValid() before reading an empty result as nothing left to fetch, which getMissingNodes()'s docstring now says.