]> Sergey Matveev's repositories - btrtrc.git/commitdiff
dht: Handle truncated KRPC packets better, requires an update to bencode package
authorMatt Joiner <anacrolix@gmail.com>
Wed, 19 Nov 2014 03:54:53 +0000 (21:54 -0600)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 19 Nov 2014 03:54:53 +0000 (21:54 -0600)
dht/dht.go

index fc703085f202839516f08257c308095111bbbdf7..010489fc895ccae80d1115670740165bf6c6a658 100644 (file)
@@ -278,7 +278,12 @@ func (s *Server) processPacket(b []byte, addr dHTAddr) {
        err := bencode.Unmarshal(b, &d)
        if err != nil {
                if se, ok := err.(*bencode.SyntaxError); !ok || se.Offset != 0 {
-                       log.Printf("%s: received bad krpc message: %s: %q", s, err, b)
+                       log.Printf("%s: received bad krpc message: %s%s", s, err, func() string {
+                               if se.What == io.ErrUnexpectedEOF {
+                                       return ""
+                               }
+                               return fmt.Sprintf(": %q", b)
+                       }())
                }
                return
        }
@@ -309,6 +314,10 @@ func (s *Server) serve() error {
                if err != nil {
                        return err
                }
+               if n == len(b) {
+                       logonce.Stderr.Printf("received dht packet exceeds buffer size")
+                       continue
+               }
                s.processPacket(b[:n], newDHTAddr(addr.(*net.UDPAddr)))
        }
 }