From efb4c557d27226695b88465e13c2ca7c408f6ccb Mon Sep 17 00:00:00 2001
From: Matt Joiner <anacrolix@gmail.com>
Date: Fri, 18 Jul 2014 02:38:11 +1000
Subject: [PATCH] Put checks in place for peer addresses with a zero Port

---
 dht/dht.go | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/dht/dht.go b/dht/dht.go
index 93537d0b..abcc7a42 100644
--- a/dht/dht.go
+++ b/dht/dht.go
@@ -220,6 +220,10 @@ func (s *Server) handleQuery(source *net.UDPAddr, m Msg) {
 		})
 	case "find_node":
 		targetID := args["target"].(string)
+		if len(targetID) != 20 {
+			log.Printf("bad DHT query: %v", m)
+			return
+		}
 		var rNodes []NodeInfo
 		if node := s.nodeByID(targetID); node != nil {
 			rNodes = append(rNodes, node.NodeInfo())
@@ -271,11 +275,16 @@ func (s *Server) reply(addr *net.UDPAddr, t string, r map[string]interface{}) {
 
 func (s *Server) heardFromNode(addr *net.UDPAddr, id string) {
 	n := s.getNode(addr)
-	n.id = id
+	if len(id) == 20 {
+		n.id = id
+	}
 	n.lastHeardFrom = time.Now()
 }
 
 func (s *Server) getNode(addr *net.UDPAddr) (n *Node) {
+	if addr.Port == 0 {
+		panic(addr)
+	}
 	n = s.nodes[addr.String()]
 	if n == nil {
 		n = &Node{
@@ -526,6 +535,10 @@ func (s *Server) liftNodes(d Msg) {
 		// log.Print(err)
 	} else {
 		for _, cni := range r.Nodes {
+			if cni.Addr.Port == 0 {
+				// TODO: Why would people even do this?
+				continue
+			}
 			n := s.getNode(cni.Addr)
 			n.id = string(cni.ID[:])
 		}
-- 
2.51.0