From b109172d0141c704f90e0272dcab806791c4580b Mon Sep 17 00:00:00 2001
From: Bojie Wu <bojie@dexon.org>
Date: Tue, 9 Oct 2018 13:28:45 +0800
Subject: app: fix nil pointer issue

---
 dex/app.go | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

(limited to 'dex')

diff --git a/dex/app.go b/dex/app.go
index 7730ba22f..b924ab620 100644
--- a/dex/app.go
+++ b/dex/app.go
@@ -129,14 +129,15 @@ func (d *DexconApp) PreparePayload(position coreTypes.Position) (payload []byte,
 
 	// set state to the pending height
 	var latestState *state.StateDB
-	if d.lastPendingHeight == 0 {
+	lastPendingBlock := d.blockchain.GetPendingBlockByHeight(d.lastPendingHeight)
+	if d.lastPendingHeight == 0 || lastPendingBlock == nil {
 		latestState, err = d.blockchain.State()
 		if err != nil {
 			log.Error("Get current state", "error", err)
 			return nil, fmt.Errorf("get current state error %v", err)
 		}
 	} else {
-		latestState, err = d.blockchain.StateAt(d.blockchain.GetPendingBlockByHeight(d.lastPendingHeight).Root())
+		latestState, err = d.blockchain.StateAt(lastPendingBlock.Root())
 		if err != nil {
 			log.Error("Get pending state", "error", err)
 			return nil, fmt.Errorf("get pending state error: %v", err)
@@ -286,14 +287,15 @@ func (d *DexconApp) VerifyBlock(block *coreTypes.Block) coreTypes.BlockVerifySta
 
 	// set state to the pending height
 	var latestState *state.StateDB
-	if d.lastPendingHeight == 0 {
+	lastPendingBlock := d.blockchain.GetPendingBlockByHeight(d.lastPendingHeight)
+	if d.lastPendingHeight == 0 || lastPendingBlock == nil {
 		latestState, err = d.blockchain.State()
 		if err != nil {
 			log.Error("Get current state", "error", err)
 			return coreTypes.VerifyInvalidBlock
 		}
 	} else {
-		latestState, err = d.blockchain.StateAt(d.blockchain.GetPendingBlockByHeight(d.lastPendingHeight).Root())
+		latestState, err = d.blockchain.StateAt(lastPendingBlock.Root())
 		if err != nil {
 			log.Error("Get pending state", "error", err)
 			return coreTypes.VerifyInvalidBlock
-- 
cgit v1.2.3