2
0
mirror of synced 2025-02-24 06:38:14 +00:00

Add some checks to TorrentReadAt for 0 byte reads

This commit is contained in:
Matt Joiner 2014-08-24 06:54:14 +10:00
parent 6dce2cbf76
commit 8f065e473f

View File

@ -161,10 +161,14 @@ func (cl *Client) TorrentReadAt(ih InfoHash, off int64, p []byte) (n int, err er
return
}
piece := t.Pieces[index]
pieceOff := pp.Integer(off % int64(t.PieceLength(0)))
high := int(t.PieceLength(index) - pieceOff)
if high < len(p) {
p = p[:high]
pieceOff := pp.Integer(off % int64(t.UsualPieceSize()))
pieceLeft := int(t.PieceLength(index) - pieceOff)
if pieceLeft <= 0 {
err = io.EOF
return
}
if len(p) > pieceLeft {
p = p[:pieceLeft]
}
for cs, _ := range piece.PendingChunkSpecs {
chunkOff := int64(pieceOff) - int64(cs.Begin)
@ -181,6 +185,9 @@ func (cl *Client) TorrentReadAt(ih InfoHash, off int64, p []byte) (n int, err er
p = p[:-chunkOff]
}
}
if len(p) == 0 {
panic(len(p))
}
return t.Data.ReadAt(p, off)
}