diff --git a/addr_manager.go b/addr_manager.go index 87b8206..964cc39 100644 --- a/addr_manager.go +++ b/addr_manager.go @@ -104,6 +104,11 @@ func (mgr *AddrManager) AddAddrs(p ID, addrs []ma.Multiaddr, ttl time.Duration) // only expand ttls exp := time.Now().Add(ttl) for _, addr := range addrs { + if addr == nil { + log.Warningf("was passed nil multiaddr for %s", p) + continue + } + addrstr := addr.String() a, found := amap[addrstr] if !found || exp.After(a.TTL) { @@ -134,6 +139,10 @@ func (mgr *AddrManager) SetAddrs(p ID, addrs []ma.Multiaddr, ttl time.Duration) exp := time.Now().Add(ttl) for _, addr := range addrs { + if addr == nil { + log.Warningf("was passed nil multiaddr for %s", p) + continue + } // re-set all of them for new ttl. addrs := addr.String() diff --git a/addr_manager_test.go b/addr_manager_test.go index 52f621c..1d6f6b6 100644 --- a/addr_manager_test.go +++ b/addr_manager_test.go @@ -200,3 +200,10 @@ func TestSetNegativeTTLClears(t *testing.T) { testHas(t, nil, m.Addrs(id1)) } + +func TestNilAddrsDontBreak(t *testing.T) { + id1 := IDS(t, "QmcNstKuwBBoVTpSCSDrwzjgrRcaYXK833Psuz2EMHwyQN") + m := AddrManager{} + m.SetAddr(id1, nil, time.Hour) + m.AddAddr(id1, nil, time.Hour) +}