From ca084f595ed80be6e97314f05df778a02f5f1f7a Mon Sep 17 00:00:00 2001 From: Evgeny Khirin <32414982+evgeny-khirin@users.noreply.github.com> Date: Wed, 26 Dec 2018 12:38:10 +0200 Subject: [PATCH] [DEV-322] Backport btcsuite/btcd PR: connmanager: check Addr for nil (#131) * [DEV-322] connmanager: check Addr for nil * [DEV-322] Added crash recovering in TestConnReqString * [DEV-322] Fixed 'go vet' errors --- connmgr/connmanager.go | 2 +- connmgr/connmanager_test.go | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/connmgr/connmanager.go b/connmgr/connmanager.go index 4acc0b2d0..2116934ab 100644 --- a/connmgr/connmanager.go +++ b/connmgr/connmanager.go @@ -89,7 +89,7 @@ func (c *ConnReq) State() ConnState { // String returns a human-readable string for the connection request. func (c *ConnReq) String() string { - if c.Addr.String() == "" { + if c.Addr == nil || c.Addr.String() == "" { return fmt.Sprintf("reqid %d", atomic.LoadUint64(&c.id)) } return fmt.Sprintf("%s (reqid %d)", c.Addr, atomic.LoadUint64(&c.id)) diff --git a/connmgr/connmanager_test.go b/connmgr/connmanager_test.go index 67769deb9..0e2e4fdb6 100644 --- a/connmgr/connmanager_test.go +++ b/connmgr/connmanager_test.go @@ -664,3 +664,22 @@ out: cmgr.Stop() cmgr.Wait() } + +// TestConnReqString ensures that ConnReq.String() does not crash +func TestConnReqString(t *testing.T) { + defer func() { + if r := recover(); r != nil { + t.Fatalf("ConnReq.String crashed %v", r) + } + }() + cr1 := &ConnReq{ + Addr: &net.TCPAddr{ + IP: net.ParseIP("127.0.0.1"), + Port: 18555, + }, + Permanent: true, + } + _ = cr1.String() + cr2 := &ConnReq{} + _ = cr2.String() +}