From 8aa3ab6ef8df4ef4c212672e0c1e3afed3875756 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Wed, 22 May 2024 17:36:52 +0200 Subject: [PATCH] restore: check file type in verify --- internal/restorer/restorer.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/restorer/restorer.go b/internal/restorer/restorer.go index 84b786997..b7d40f712 100644 --- a/internal/restorer/restorer.go +++ b/internal/restorer/restorer.go @@ -473,7 +473,7 @@ func (res *Restorer) VerifyFiles(ctx context.Context, dst string) (int, error) { // Reusing buffers prevents the verifier goroutines allocating all of RAM and // flushing the filesystem cache (at least on Linux). func (res *Restorer) verifyFile(target string, node *restic.Node, buf []byte) ([]byte, error) { - f, err := os.Open(target) + f, err := os.OpenFile(target, fs.O_RDONLY|fs.O_NOFOLLOW, 0) if err != nil { return buf, err } @@ -485,6 +485,8 @@ func (res *Restorer) verifyFile(target string, node *restic.Node, buf []byte) ([ switch { case err != nil: return buf, err + case !fi.Mode().IsRegular(): + return buf, errors.Errorf("Expected %s to be a regular file", target) case int64(node.Size) != fi.Size(): return buf, errors.Errorf("Invalid file size for %s: expected %d, got %d", target, node.Size, fi.Size())