diff --git a/src/restic/fuse/file.go b/src/restic/fuse/file.go index 2f0db5738..02b36579c 100644 --- a/src/restic/fuse/file.go +++ b/src/restic/fuse/file.go @@ -4,6 +4,7 @@ package fuse import ( + "errors" "sync" "restic" @@ -120,9 +121,16 @@ func (f *file) getBlobAt(i int) (blob []byte, err error) { } func (f *file) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error { - debug.Log("file.Read", "Read(%v), file size %v", req.Size, f.node.Size) + debug.Log("file.Read", "Read(%v, %v, %v), file size %v", f.node.Name, req.Size, req.Offset, f.node.Size) offset := req.Offset + lastSize := f.sizes[len(f.sizes)-1] + if offset > int64(lastSize) { + debug.Log("file.Read", "Read(%v): offset is greater than file size: %v > %v, node size %v", + f.node.Name, req.Offset, lastSize, f.node.Size) + return errors.New("offset greater than files size") + } + // Skip blobs before the offset startContent := 0 for offset > int64(f.sizes[startContent]) {