From 36d275697806678de4af19645a9110529ad13800 Mon Sep 17 00:00:00 2001 From: chrislu Date: Tue, 14 Jun 2022 11:16:47 -0700 Subject: [PATCH] volume: avoid writing too much data for range requests in large files related to https://github.com/chrislusf/seaweedfs/issues/3178 --- weed/storage/needle/needle_read_page.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/weed/storage/needle/needle_read_page.go b/weed/storage/needle/needle_read_page.go index c00195e93..e909869f3 100644 --- a/weed/storage/needle/needle_read_page.go +++ b/weed/storage/needle/needle_read_page.go @@ -14,9 +14,10 @@ func (n *Needle) ReadNeedleDataInto(r backend.BackendStorageFile, volumeOffset i crc := CRC(0) for x := needleOffset; x < needleOffset+size; x += int64(len(buf)) { count, err := n.ReadNeedleData(r, volumeOffset, buf, x) - if count > 0 { - crc = crc.Update(buf[0:count]) - if _, err = writer.Write(buf[0:count]); err != nil { + toWrite := min(int64(count), needleOffset+size-x) + if toWrite > 0 { + crc = crc.Update(buf[0:toWrite]) + if _, err = writer.Write(buf[0:toWrite]); err != nil { return fmt.Errorf("ReadNeedleData write: %v", err) } }