client.go | 6 +++++- torrent.go | 7 +++---- diff --git a/client.go b/client.go index 4b0d0ac43627e71b576ebe6f229b9cc1ed066a58..e5daf8b5fae6afc0ac1dcedab410820134e07edb 100644 --- a/client.go +++ b/client.go @@ -1244,7 +1244,11 @@ metadata_size, ok := metadata_sizeUntyped.(int64) if !ok { log.Printf("bad metadata_size type: %T", metadata_sizeUntyped) } else { - t.setMetadataSize(metadata_size, cl) + err = t.setMetadataSize(metadata_size) + if err != nil { + err = fmt.Errorf("error setting metadata size to %d", metadata_size) + break + } } } if _, ok := c.PeerExtensionIDs["ut_metadata"]; ok { diff --git a/torrent.go b/torrent.go index 2f76ab9356eb914db75f41236582460bd088662e..7d027fae1037323df14134eee4a08634316e9135 100644 --- a/torrent.go +++ b/torrent.go @@ -275,14 +275,13 @@ return true } // TODO: Propagate errors to disconnect peer. -func (t *Torrent) setMetadataSize(bytes int64, cl *Client) { +func (t *Torrent) setMetadataSize(bytes int64) (err error) { if t.haveInfo() { // We already know the correct metadata size. return } if bytes <= 0 || bytes > 10000000 { // 10MB, pulled from my ass. - log.Printf("%s: received bad metadata size: %d", t, bytes) - return + return errors.New("bad size") } if t.metadataBytes != nil && len(t.metadataBytes) == int(bytes) { return @@ -292,7 +291,7 @@ t.metadataCompletedChunks = make([]bool, (bytes+(1<<14)-1)/(1<<14)) for _, c := range t.conns { c.requestPendingMetadata() } - + return } // The current working name for the torrent. Either the name in the info dict,