"fmt"
"time"
+ "github.com/anacrolix/torrent/metainfo"
pp "github.com/anacrolix/torrent/peer_protocol"
)
}
return
}
+
+func validateInfo(info *metainfo.Info) error {
+ if len(info.Pieces)%20 != 0 {
+ return errors.New("pieces has invalid length")
+ }
+ if int((info.TotalLength()+info.PieceLength-1)/info.PieceLength) != info.NumPieces() {
+ return errors.New("piece count and file lengths are at odds")
+ }
+ return nil
+}
// Called when metadata for a torrent becomes available.
func (t *torrent) setMetadata(md *metainfo.Info, infoBytes []byte, eventLocker sync.Locker) (err error) {
+ err = validateInfo(md)
+ if err != nil {
+ err = fmt.Errorf("bad info: %s", err)
+ return
+ }
t.Info = md
t.length = 0
for _, f := range t.Info.UpvertedFiles() {