diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 0b645caa1..432bfa742 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -569,12 +569,24 @@ func (c *Checker) checkTree(id restic.ID, tree *restic.Tree) (errs []error) { errs = append(errs, Error{TreeID: id, Err: errors.Errorf("file %q has nil blob list", node.Name)}) } + var size uint64 for b, blobID := range node.Content { if blobID.IsNull() { errs = append(errs, Error{TreeID: id, Err: errors.Errorf("file %q blob %d has null ID", node.Name, b)}) continue } blobs = append(blobs, blobID) + blobSize, found := c.repo.LookupBlobSize(blobID, restic.DataBlob) + if !found { + errs = append(errs, Error{TreeID: id, Err: errors.Errorf("file %q blob %d size could not be found", node.Name, b)}) + } + size += uint64(blobSize) + } + if size != node.Size { + errs = append(errs, Error{ + TreeID: id, + Err: errors.Errorf("file %q: metadata size (%v) and sum of blob sizes (%v) do not match", node.Name, node.Size, size), + }) } case "dir": if node.Subtree == nil {