From 8c37494b7f11384a80ea2ad78374ae8f4a365261 Mon Sep 17 00:00:00 2001 From: Sjon Hortensius Date: Mon, 12 Aug 2019 14:33:14 +0200 Subject: [PATCH] Fix #19198 - Be defensive in handling getBlock result, it can be nil --- core/blockchain.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/blockchain.go b/core/blockchain.go index 59be355895..de75b935bf 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -875,12 +875,18 @@ func (bc *BlockChain) Rollback(chain []common.Hash) { } if currentFastBlock := bc.CurrentFastBlock(); currentFastBlock.Hash() == hash { newFastBlock := bc.GetBlock(currentFastBlock.ParentHash(), currentFastBlock.NumberU64()-1) + if newFastBlock == nil { + log.Crit("Failed to retrieve previous fastBlock during rollback") + } rawdb.WriteHeadFastBlockHash(bc.db, newFastBlock.Hash()) bc.currentFastBlock.Store(newFastBlock) headFastBlockGauge.Update(int64(newFastBlock.NumberU64())) } if currentBlock := bc.CurrentBlock(); currentBlock.Hash() == hash { newBlock := bc.GetBlock(currentBlock.ParentHash(), currentBlock.NumberU64()-1) + if newBlock == nil { + log.Crit("Failed to retrieve previous block during rollback") + } rawdb.WriteHeadBlockHash(bc.db, newBlock.Hash()) bc.currentBlock.Store(newBlock) headBlockGauge.Update(int64(newBlock.NumberU64()))