mirror of
https://github.com/rclone/rclone.git
synced 2026-01-03 09:03:50 +00:00
fs/object: fix memory object out of bounds Seek
This commit is contained in:
@@ -110,6 +110,7 @@ func TestMemoryObject(t *testing.T) {
|
||||
assert.Equal(t, newNow, o.ModTime(context.Background()))
|
||||
|
||||
checkOpen := func(rc io.ReadCloser, expected string) {
|
||||
t.Helper()
|
||||
actual, err := io.ReadAll(rc)
|
||||
assert.NoError(t, err)
|
||||
err = rc.Close()
|
||||
@@ -118,6 +119,7 @@ func TestMemoryObject(t *testing.T) {
|
||||
}
|
||||
|
||||
checkContent := func(o fs.Object, expected string) {
|
||||
t.Helper()
|
||||
rc, err := o.Open(context.Background())
|
||||
assert.NoError(t, err)
|
||||
checkOpen(rc, expected)
|
||||
@@ -127,12 +129,28 @@ func TestMemoryObject(t *testing.T) {
|
||||
|
||||
rc, err := o.Open(context.Background(), &fs.RangeOption{Start: 1, End: 3})
|
||||
assert.NoError(t, err)
|
||||
checkOpen(rc, "ot")
|
||||
checkOpen(rc, "ota")
|
||||
|
||||
rc, err = o.Open(context.Background(), &fs.RangeOption{Start: 1, End: -1})
|
||||
assert.NoError(t, err)
|
||||
checkOpen(rc, "otato")
|
||||
|
||||
rc, err = o.Open(context.Background(), &fs.RangeOption{Start: 1, End: 4096})
|
||||
assert.NoError(t, err)
|
||||
checkOpen(rc, "otato")
|
||||
|
||||
rc, err = o.Open(context.Background(), &fs.RangeOption{Start: -1, End: 4})
|
||||
assert.NoError(t, err)
|
||||
checkOpen(rc, "tato")
|
||||
|
||||
rc, err = o.Open(context.Background(), &fs.SeekOption{Offset: 3})
|
||||
assert.NoError(t, err)
|
||||
checkOpen(rc, "ato")
|
||||
|
||||
rc, err = o.Open(context.Background(), &fs.SeekOption{Offset: -100})
|
||||
assert.NoError(t, err)
|
||||
checkOpen(rc, "potato")
|
||||
|
||||
// check it fits within the buffer
|
||||
newNow = now.Add(2 * time.Minute)
|
||||
newContent := bytes.NewBufferString("Rutabaga")
|
||||
|
||||
Reference in New Issue
Block a user