fix segfault in repair when seq < minSequence

This commit is contained in:
Nathan Nichols
2021-05-13 09:56:37 -05:00
parent db92f420d9
commit a288136e69

View File

@@ -158,16 +158,21 @@ void
BackendIndexer::doBooksRepair( BackendIndexer::doBooksRepair(
BackendInterface const& backend, BackendInterface const& backend,
std::optional<uint32_t> sequence) std::optional<uint32_t> sequence)
{
if (!sequence)
{ {
auto rng = backend.fetchLedgerRangeNoThrow(); auto rng = backend.fetchLedgerRangeNoThrow();
if (!rng) if (!rng)
return; return;
if (!sequence)
sequence = rng->maxSequence; sequence = rng->maxSequence;
}
if(sequence < rng->minSequence)
sequence = rng->minSequence;
BOOST_LOG_TRIVIAL(info) BOOST_LOG_TRIVIAL(info)
<< __func__ << " sequence = " << std::to_string(*sequence); << __func__ << " sequence = " << std::to_string(*sequence);
ripple::uint256 zero = {}; ripple::uint256 zero = {};
while (true) while (true)
{ {
@@ -231,14 +236,17 @@ void
BackendIndexer::doKeysRepair( BackendIndexer::doKeysRepair(
BackendInterface const& backend, BackendInterface const& backend,
std::optional<uint32_t> sequence) std::optional<uint32_t> sequence)
{
if (!sequence)
{ {
auto rng = backend.fetchLedgerRangeNoThrow(); auto rng = backend.fetchLedgerRangeNoThrow();
if (!rng) if (!rng)
return; return;
if (!sequence)
sequence = rng->maxSequence; sequence = rng->maxSequence;
}
if(sequence < rng->minSequence)
sequence = rng->minSequence;
BOOST_LOG_TRIVIAL(info) BOOST_LOG_TRIVIAL(info)
<< __func__ << " sequence = " << std::to_string(*sequence); << __func__ << " sequence = " << std::to_string(*sequence);