From c0fca3f50a9ecebe06429aa1af5fe042fd55fcf0 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sun, 14 Oct 2018 21:00:14 +0200 Subject: [PATCH] restore: Close files tested with --verify Before, the target files were opened once per blob and never closed, this commit fixes that. --- internal/restorer/restorer.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/internal/restorer/restorer.go b/internal/restorer/restorer.go index b6fb2b60e..bbef5083b 100644 --- a/internal/restorer/restorer.go +++ b/internal/restorer/restorer.go @@ -306,25 +306,33 @@ func (res *Restorer) VerifyFiles(ctx context.Context, dst string) (int, error) { return errors.Errorf("Invalid file size: expected %d got %d", node.Size, stat.Size()) } + file, err := os.Open(target) + if err != nil { + return err + } + offset := int64(0) for _, blobID := range node.Content { - rd, err := os.Open(target) - if err != nil { - return err - } blobs, _ := res.repo.Index().Lookup(blobID, restic.DataBlob) length := blobs[0].Length - uint(crypto.Extension) buf := make([]byte, length) // TODO do I want to reuse the buffer somehow? - _, err = rd.ReadAt(buf, offset) + _, err = file.ReadAt(buf, offset) if err != nil { + _ = file.Close() return err } if !blobID.Equal(restic.Hash(buf)) { + _ = file.Close() return errors.Errorf("Unexpected contents starting at offset %d", offset) } offset += int64(length) } + err = file.Close() + if err != nil { + return err + } + return nil }, leaveDir: func(node *restic.Node, target, location string) error { return nil },