]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Put checks in place for peer addresses with a zero Port
authorMatt Joiner <anacrolix@gmail.com>
Thu, 17 Jul 2014 16:38:11 +0000 (02:38 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 17 Jul 2014 16:38:11 +0000 (02:38 +1000)
dht/dht.go

index 93537d0b1051bdd3705610ab1da95090864305a1..abcc7a427599dec9e05a2b3d8f1388eecb93cb31 100644 (file)
@@ -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[:])
                }