Skip to content

Commit 0509445

Browse files
authored
swarm: don't dial unspecified addresses (#2560)
* swarm: don't dial unspecified addresses * add test
1 parent dce9424 commit 0509445

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

p2p/net/swarm/swarm_dial.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,14 @@ func (s *Swarm) filterKnownUndialables(p peer.ID, addrs []ma.Multiaddr) (goodAdd
475475
}
476476

477477
return ma.FilterAddrs(addrs,
478+
// Linux and BSD treat an unspecified address when dialing as a localhost address.
479+
// Windows doesn't support this. We filter all such addresses out because peers
480+
// listening on unspecified addresses will advertise more specific addresses.
481+
// https://unix.stackexchange.com/a/419881
482+
// https://superuser.com/a/1755455
483+
func(addr ma.Multiaddr) bool {
484+
return !manet.IsIPUnspecified(addr)
485+
},
478486
func(addr ma.Multiaddr) bool {
479487
if ma.Contains(ourAddrs, addr) {
480488
addrErrs = append(addrErrs, TransportError{Address: addr, Cause: ErrDialToSelf})

p2p/net/swarm/swarm_dial_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,9 @@ func TestAddrsForDialFiltering(t *testing.T) {
277277
t1 := ma.StringCast("/ip4/1.2.3.4/tcp/1")
278278
ws1 := ma.StringCast("/ip4/1.2.3.4/tcp/1/ws")
279279

280+
unSpecQ := ma.StringCast("/ip4/0.0.0.0/udp/2/quic-v1")
281+
unSpecT := ma.StringCast("/ip6/::/tcp/2/")
282+
280283
resolver, err := madns.NewResolver(madns.WithDefaultResolver(&madns.MockResolver{}))
281284
require.NoError(t, err)
282285
s := newTestSwarmWithResolver(t, resolver)
@@ -307,6 +310,11 @@ func TestAddrsForDialFiltering(t *testing.T) {
307310
input: append([]ma.Multiaddr{q1}, ourAddrs...),
308311
output: []ma.Multiaddr{q1},
309312
},
313+
{
314+
name: "unspecified-filtered",
315+
input: []ma.Multiaddr{q1v1, t1, unSpecQ, unSpecT},
316+
output: []ma.Multiaddr{q1v1, t1},
317+
},
310318
}
311319

312320
ctx := context.Background()

0 commit comments

Comments
 (0)