From: Matt Joiner Date: Thu, 17 Jul 2014 16:38:11 +0000 (+1000) Subject: Put checks in place for peer addresses with a zero Port X-Git-Tag: v1.0.0~1654 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=efb4c557d27226695b88465e13c2ca7c408f6ccb;p=btrtrc.git Put checks in place for peer addresses with a zero Port --- 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[:]) }