From 3d2f3d9a7f71789fefa6021e15ef22b6dc2e6a6f Mon Sep 17 00:00:00 2001 From: remusb Date: Sun, 10 Dec 2017 14:11:31 +0200 Subject: [PATCH] cache: catch panic and add more logging for #1896 --- cache/handle.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cache/handle.go b/cache/handle.go index 03b104078..4a27574b5 100644 --- a/cache/handle.go +++ b/cache/handle.go @@ -232,6 +232,11 @@ func (r *Handle) getChunk(chunkStart int64) ([]byte, error) { // first chunk will be aligned with the start if offset > 0 { + if offset >= len(data) { + fs.Errorf(r, "unexpected conditions during reading. current position: %v, current chunk position: %v, current chunk size: %v, offset: %v, chunk size: %v, file size: %v", + r.offset, chunkStart, len(data), offset, r.cacheFs().chunkSize, r.cachedObject.Size()) + return nil, io.ErrUnexpectedEOF + } data = data[int(offset):] } @@ -256,7 +261,7 @@ func (r *Handle) Read(p []byte) (n int, err error) { currentOffset := r.offset buf, err = r.getChunk(currentOffset) if err != nil && len(buf) == 0 { - fs.Errorf(r, "(%v/%v) empty and error (%v) response", currentOffset, r.cachedObject.Size(), err) + fs.Errorf(r, "(%v/%v) error (%v) response", currentOffset, r.cachedObject.Size(), err) return 0, io.EOF } readSize := copy(p, buf)