Parcourir la source

p2p/discover: require table nodes to have an IP (#21330)

This fixes a corner case in discv5. The issue cannot happen in discv4
because it performs IP checks on all incoming node information.
Felix Lange il y a 5 ans
Parent
commit
6ef4495a8f
2 fichiers modifiés avec 4 ajouts et 1 suppressions
  1. 3 0
      p2p/discover/table.go
  2. 1 1
      p2p/discover/table_test.go

+ 3 - 0
p2p/discover/table.go

@@ -520,6 +520,9 @@ func (tab *Table) delete(node *node) {
 }
 
 func (tab *Table) addIP(b *bucket, ip net.IP) bool {
+	if len(ip) == 0 {
+		return false // Nodes without IP cannot be added.
+	}
 	if netutil.IsLAN(ip) {
 		return true
 	}

+ 1 - 1
p2p/discover/table_test.go

@@ -58,7 +58,7 @@ func testPingReplace(t *testing.T, newNodeIsResponding, lastInBucketIsResponding
 
 	// Fill up the sender's bucket.
 	pingKey, _ := crypto.HexToECDSA("45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8")
-	pingSender := wrapNode(enode.NewV4(&pingKey.PublicKey, net.IP{}, 99, 99))
+	pingSender := wrapNode(enode.NewV4(&pingKey.PublicKey, net.IP{127, 0, 0, 1}, 99, 99))
 	last := fillBucket(tab, pingSender)
 
 	// Add the sender as if it just pinged us. Revalidate should replace the last node in