From 0778a3ebae5f7b38b5e62912716a2f724646d553 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 03:16:59 -0800 Subject: [PATCH] Don't blow up if asked to acquire a hash that's not a ledger. --- src/cpp/ripple/LedgerAcquire.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 01cf1bfbac..9941fc067a 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -90,7 +90,11 @@ bool LedgerAcquire::tryLocal() return false; mLedger = boost::make_shared(strCopy(node->getData()), true); - assert(mLedger->getHash() == mHash); + if (mLedger->getHash() != mHash) + { // We know for a fact the ledger can never be acquired + mFailed = true; + return true; + } mHaveBase = true; if (!mLedger->getTransHash()) @@ -236,7 +240,7 @@ void LedgerAcquire::trigger(Peer::ref peer) { tmGL.set_querytype(ripple::qtINDIRECT); - if (!isProgress() && mByHash) + if (!isProgress() && !mFailed && mByHash) { std::vector need = getNeededHashes(); if (!need.empty()) @@ -287,7 +291,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } - if (!mHaveBase) + if (!mHaveBase && !mFailed) { tmGL.set_itype(ripple::liBASE); cLog(lsTRACE) << "Sending base request to " << (peer ? "selected peer" : "all peers"); @@ -299,7 +303,7 @@ void LedgerAcquire::trigger(Peer::ref peer) if (mLedger) tmGL.set_ledgerseq(mLedger->getLedgerSeq()); - if (mHaveBase && !mHaveTransactions) + if (mHaveBase && !mHaveTransactions && !mFailed) { assert(mLedger); if (mLedger->peekTransactionMap()->getHash().isZero()) @@ -340,7 +344,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } } - if (mHaveBase && !mHaveState) + if (mHaveBase && !mHaveState && !mFailed) { assert(mLedger); if (mLedger->peekAccountStateMap()->getHash().isZero())