From a38e1a9c00c6a0b95408269a035b409b8ff6c228 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com>
Date: Fri, 3 Mar 2017 09:54:13 +0200
Subject: [PATCH] core: reorg logs crashed, add a check for corner cases

---
 core/blockchain.go | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/core/blockchain.go b/core/blockchain.go
index 88ba76bc7..3879f0644 100644
--- a/core/blockchain.go
+++ b/core/blockchain.go
@@ -1145,13 +1145,16 @@ func (self *BlockChain) reorg(oldBlock, newBlock *types.Block) error {
 		}
 	}
 	// Ensure the user sees large reorgs
-	logFn := log.Debug
-	if len(oldChain) > 63 {
-		logFn = log.Warn
+	if len(oldChain) > 0 && len(newChain) > 0 {
+		logFn := log.Debug
+		if len(oldChain) > 63 {
+			logFn = log.Warn
+		}
+		logFn("Chain split detected", "number", commonBlock.Number(), "hash", commonBlock.Hash(),
+			"drop", len(oldChain), "dropfrom", oldChain[0].Hash(), "add", len(newChain), "addfrom", newChain[0].Hash())
+	} else {
+		log.Error("Impossible reorg, please file an issue", "oldnum", oldBlock.Number(), "oldhash", oldBlock.Hash(), "newnum", newBlock.Number(), "newhash", newBlock.Hash())
 	}
-	logFn("Chain split detected", "number", commonBlock.Number(), "hash", commonBlock.Hash(),
-		"drop", len(oldChain), "dropfrom", oldChain[0].Hash(), "add", len(newChain), "addfrom", newChain[0].Hash())
-
 	var addedTxs types.Transactions
 	// insert blocks. Order does not matter. Last block will be written in ImportChain itself which creates the new head properly
 	for _, block := range newChain {
-- 
GitLab