From f3317322f83a556d661a697c0290a02bd50fe0e7 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 4 Aug 2015 01:17:32 +1000 Subject: [PATCH] Fix crash if peer sends out of bounds HAVE message --- client.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client.go b/client.go index efa41e2c..9469096f 100644 --- a/client.go +++ b/client.go @@ -1249,7 +1249,7 @@ func (t *torrent) initRequestOrdering(c *connection) { } } -func (me *Client) peerGotPiece(t *torrent, c *connection, piece int) { +func (me *Client) peerGotPiece(t *torrent, c *connection, piece int) error { if !c.peerHasAll { if t.haveInfo() { if c.PeerPieces == nil { @@ -1260,12 +1260,16 @@ func (me *Client) peerGotPiece(t *torrent, c *connection, piece int) { c.PeerPieces = append(c.PeerPieces, false) } } + if piece >= len(c.PeerPieces) { + return errors.New("peer got out of range piece index") + } c.PeerPieces[piece] = true } if t.wantPiece(piece) { t.connPendPiece(c, piece) me.replenishConnRequests(t, c) } + return nil } func (me *Client) peerUnchoked(torrent *torrent, conn *connection) { -- 2.48.1