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())) {
}
}
}
+
+// 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)))
+}