From 5afda94a3c987bfdbe46369d623c068f1664f18b Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Fri, 29 Jul 2016 20:55:09 +0200 Subject: [PATCH] Handle reads with large offsets --- src/restic/fuse/file.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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]) {