From: Matt Joiner Date: Mon, 28 Jul 2025 03:23:22 +0000 (+1000) Subject: Set piece incomplete if part file size incorrect X-Git-Tag: v1.59.0~2^2~88 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b282e3e293078745335f2bebefa759b22ead6e86;p=btrtrc.git Set piece incomplete if part file size incorrect --- diff --git a/storage/file-torrent.go b/storage/file-torrent.go index 55200d4f..ad9e98f8 100644 --- a/storage/file-torrent.go +++ b/storage/file-torrent.go @@ -9,6 +9,7 @@ import ( "os" "github.com/anacrolix/missinggo/v2" + "github.com/anacrolix/missinggo/v2/panicif" "github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/segments" @@ -57,18 +58,24 @@ func (fts *fileTorrentImpl) setCompletionFromPartFiles() error { } else if !errors.Is(err, fs.ErrNotExist) { fts.logger().Warn("error checking file size", "err", err) } + // Ensure all pieces associated with a file are not marked as complete (at most unknown). for pieceIndex := f.beginPieceIndex(); pieceIndex < f.endPieceIndex(); pieceIndex++ { notComplete[pieceIndex] = true } } for i, nc := range notComplete { if nc { - // Use whatever the piece completion has, or trigger a hash. - continue - } - err := fts.setPieceCompletion(i, true) - if err != nil { - return fmt.Errorf("setting piece %v completion: %w", i, err) + c := fts.getCompletion(i) + if c.Complete { + // TODO: We need to set unknown so that verification of the data we do have could + // occur naturally but that'll be a big change. + panicif.Err(fts.setPieceCompletion(i, false)) + } + } else { + err := fts.setPieceCompletion(i, true) + if err != nil { + return fmt.Errorf("setting piece %v completion: %w", i, err) + } } } return nil