fix possible out of range bytes

avoid buff out of range resp.Data = buff[:totalRead]
This commit is contained in:
Chris Lu
2020-08-16 23:47:34 -07:00
parent 48ed7f8a32
commit 2ac27616bc
3 changed files with 8 additions and 20 deletions

View File

@@ -3,7 +3,6 @@ package filesys
import (
"bytes"
"io"
"math"
)
type IntervalNode struct {
@@ -186,25 +185,15 @@ func (c *ContinuousIntervals) removeList(target *IntervalLinkedList) {
}
func (c *ContinuousIntervals) ReadData(data []byte, startOffset int64) (offset int64, size int) {
var minOffset int64 = math.MaxInt64
var maxStop int64
func (c *ContinuousIntervals) ReadData(data []byte, startOffset int64) (maxStop int64) {
for _, list := range c.lists {
start := max(startOffset, list.Offset())
stop := min(startOffset+int64(len(data)), list.Offset()+list.Size())
if start <= stop {
if start < stop {
list.ReadData(data[start-startOffset:], start, stop)
minOffset = min(minOffset, start)
maxStop = max(maxStop, stop)
}
}
if minOffset == math.MaxInt64 {
return 0, 0
}
offset = minOffset
size = int(maxStop - offset)
return
}