From: Matt Joiner Date: Tue, 17 May 2016 06:06:18 +0000 (+1000) Subject: dht: Don't contact nodes with an IP containing a leading octet of 0 X-Git-Tag: v1.0.0~716 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=88d21ce627f0aabd9d1e336ef42e08354c1044d8;p=btrtrc.git dht: Don't contact nodes with an IP containing a leading octet of 0 --- diff --git a/dht/announce.go b/dht/announce.go index ead301a4..c6b64579 100644 --- a/dht/announce.go +++ b/dht/announce.go @@ -115,10 +115,20 @@ func (s *Server) Announce(infoHash string, port int, impliedPort bool) (*Announc return disc, nil } +func validNodeAddr(addr Addr) bool { + ua := addr.UDPAddr() + if ua.Port == 0 { + return false + } + if ip4 := ua.IP.To4(); ip4 != nil && ip4[0] == 0 { + return false + } + return true +} + // TODO: Merge this with maybeGetPeersFromAddr. func (a *Announce) gotNodeAddr(addr Addr) { - if addr.UDPAddr().Port == 0 { - // Not a contactable address. + if !validNodeAddr(addr) { return } if a.triedAddrs.Test([]byte(addr.String())) { diff --git a/dht/dht_test.go b/dht/dht_test.go index 166e8f0c..6ed8c4aa 100644 --- a/dht/dht_test.go +++ b/dht/dht_test.go @@ -221,3 +221,11 @@ func TestHook(t *testing.T) { } } } + +// Check that address resolution doesn't rat out invalid SendTo addr +// arguments. +func TestResolveBadAddr(t *testing.T) { + ua, err := net.ResolveUDPAddr("udp", "0.131.255.145:33085") + require.NoError(t, err) + assert.False(t, validNodeAddr(NewAddr(ua))) +}