diff --git a/libtransmission/peer-msgs.c b/libtransmission/peer-msgs.c index bfb7a4fc6..93b46790b 100644 --- a/libtransmission/peer-msgs.c +++ b/libtransmission/peer-msgs.c @@ -1434,12 +1434,17 @@ readBtMessage( tr_peermsgs * msgs, struct evbuffer * inbuf, size_t inlen ) updatePeerProgress( msgs ); break; - case BT_BITFIELD: + case BT_BITFIELD: { + const size_t bitCount = tr_torrentHasMetadata( msgs->torrent ) + ? msgs->torrent->info.pieceCount + : msglen * 8; dbgmsg( msgs, "got a bitfield" ); - tr_bitsetReserve( &msgs->peer->have, msglen*8 ); - tr_peerIoReadBytes( msgs->peer->io, inbuf, msgs->peer->have.bitfield.bits, msglen ); + tr_bitsetReserve( &msgs->peer->have, bitCount ); + tr_peerIoReadBytes( msgs->peer->io, inbuf, + msgs->peer->have.bitfield.bits, msglen ); updatePeerProgress( msgs ); break; + } case BT_REQUEST: {