diff --git a/lib/scanner/blocks.go b/lib/scanner/blocks.go index f343b8ee2..d1a9ae0a5 100644 --- a/lib/scanner/blocks.go +++ b/lib/scanner/blocks.go @@ -30,7 +30,7 @@ func Blocks(ctx context.Context, r io.Reader, blocksize int, sizehint int64, cou } hf := sha256.New() - hashLength := hf.Size() + const hashLength = sha256.Size var weakHf hash.Hash32 = noopHash{} var multiHf io.Writer = hf @@ -48,7 +48,11 @@ func Blocks(ctx context.Context, r io.Reader, blocksize int, sizehint int64, cou // Allocate contiguous blocks for the BlockInfo structures and their // hashes once and for all, and stick to the specified size. r = io.LimitReader(r, sizehint) - numBlocks := int(sizehint / int64(blocksize)) + numBlocks := sizehint / int64(blocksize) + remainder := sizehint % int64(blocksize) + if remainder != 0 { + numBlocks++ + } blocks = make([]protocol.BlockInfo, 0, numBlocks) hashes = make([]byte, 0, hashLength*numBlocks) } diff --git a/lib/scanner/walk_test.go b/lib/scanner/walk_test.go index dfa367462..06f313646 100644 --- a/lib/scanner/walk_test.go +++ b/lib/scanner/walk_test.go @@ -551,7 +551,7 @@ func (l testfileList) String() string { var initOnce sync.Once const ( - testdataSize = 17 << 20 + testdataSize = 17<<20 + 1 testdataName = "_random.data" )