From 1b68ba953be15365b5c2ebdb2e0946a0c69e335d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 17 Aug 2020 22:46:32 -0700 Subject: [PATCH] fix for out of range reads --- weed/filer2/reader_at.go | 10 ++++------ weed/filer2/reader_at_test.go | 11 +++++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/weed/filer2/reader_at.go b/weed/filer2/reader_at.go index 09d99dfb8..84915f3f2 100644 --- a/weed/filer2/reader_at.go +++ b/weed/filer2/reader_at.go @@ -108,12 +108,10 @@ func (c *ChunkReadAt) doReadAt(p []byte, offset int64) (n int, err error) { glog.V(4).Infof("doReadAt [%d,%d), n:%v, err:%v", offset, offset+int64(len(p)), n, err) - if remaining > 0 { - glog.V(4).Infof("zero2 [%d,%d)", n, n+int(remaining)) - n += int(remaining) - if n > int(c.fileSize - offset){ - n = int(c.fileSize - offset) - } + if remaining > 0 && c.fileSize > startOffset { + delta := int(min(remaining, c.fileSize - startOffset)) + glog.V(4).Infof("zero2 [%d,%d)", n, n+delta) + n += delta } if offset+int64(n) >= c.fileSize { diff --git a/weed/filer2/reader_at_test.go b/weed/filer2/reader_at_test.go index 2a42cfd49..581436c70 100644 --- a/weed/filer2/reader_at_test.go +++ b/weed/filer2/reader_at_test.go @@ -77,6 +77,11 @@ func testReadAt(t *testing.T, readerAt *ChunkReadAt, offset int64, size int, exp data := make([]byte, size) n, err := readerAt.ReadAt(data, offset) + for _, d := range data { + fmt.Printf("%x", d) + } + fmt.Println() + if expected != n { t.Errorf("unexpected read size: %d, expect: %d", n, expected) } @@ -84,10 +89,6 @@ func testReadAt(t *testing.T, readerAt *ChunkReadAt, offset int64, size int, exp t.Errorf("unexpected read error: %v, expect: %v", err, expectedErr) } - for _, d := range data { - fmt.Printf("%x", d) - } - fmt.Println() } func TestReaderAt0(t *testing.T) { @@ -119,4 +120,6 @@ func TestReaderAt0(t *testing.T) { testReadAt(t, readerAt, 3, 16, 7, io.EOF) testReadAt(t, readerAt, 3, 5, 5, nil) + testReadAt(t, readerAt, 11, 5, 0, io.EOF) + }