From e2fc96cc5a400a2c9aedf7071f26c0b1dab1df0d Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 16 Jul 2014 17:10:17 +1000 Subject: [PATCH] Fix crash when KRPC messages don't contain a valid "t" field --- dht/dht.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dht/dht.go b/dht/dht.go index 61a0eb2c..cd8f9e35 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -64,6 +64,15 @@ func (m Msg) String() string { return fmt.Sprintf("%#v", m) } +func (m Msg) T() (t string) { + tif, ok := m["t"] + if !ok { + return + } + t, _ = tif.(string) + return +} + type transaction struct { remoteAddr net.Addr t string @@ -128,7 +137,7 @@ func (s *Server) Serve() error { if err != nil { return err } - var d map[string]interface{} + var d Msg err = bencode.Unmarshal(b[:n], &d) if err != nil { log.Printf("%s: received bad krpc message: %s: %q", s, err, b[:n]) @@ -140,7 +149,7 @@ func (s *Server) Serve() error { s.mu.Unlock() continue } - t := s.findResponseTransaction(d["t"].(string), addr) + t := s.findResponseTransaction(d.T(), addr) if t == nil { //log.Printf("unexpected message: %#v", d) s.mu.Unlock() -- 2.48.1