]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Log bad metadata packets instead of crashing
authorMatt Joiner <anacrolix@gmail.com>
Wed, 19 Nov 2014 03:57:27 +0000 (21:57 -0600)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 19 Nov 2014 03:57:27 +0000 (21:57 -0600)
client.go

index 88930fcf1eb318a5261a485361d54a2b4f3f8c80..9d97de935ed4e9e2bcc5c88e7d39108f33dafd01 100644 (file)
--- a/client.go
+++ b/client.go
@@ -846,7 +846,12 @@ func (cl *Client) gotMetadataExtensionMsg(payload []byte, t *torrent, c *connect
                if t.haveInfo() {
                        break
                }
-               t.SaveMetadataPiece(piece, payload[len(payload)-metadataPieceSize(d["total_size"], piece):])
+               begin := len(payload) - metadataPieceSize(d["total_size"], piece)
+               if begin < 0 || begin >= len(payload) {
+                       log.Printf("got bad metadata piece")
+                       break
+               }
+               t.SaveMetadataPiece(piece, payload[begin:])
                if !t.HaveAllMetadataPieces() {
                        break
                }