diff --git a/models/dbfs/dbfile.go b/models/dbfs/dbfile.go index ebaa4db80c..ba118182e5 100644 --- a/models/dbfs/dbfile.go +++ b/models/dbfs/dbfile.go @@ -38,7 +38,7 @@ type file struct { var _ File = (*file)(nil) func (f *file) readAt(fileMeta *FileMeta, offset int64, p []byte) (n int, err error) { - if f.offset >= fileMeta.FileSize { + if offset >= fileMeta.FileSize { return 0, io.EOF } diff --git a/models/dbfs/dbfs_test.go b/models/dbfs/dbfs_test.go index 2c3e0f8c64..9ebe23a1c5 100644 --- a/models/dbfs/dbfs_test.go +++ b/models/dbfs/dbfs_test.go @@ -13,9 +13,8 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/unittest" - "github.com/stretchr/testify/assert" - _ "github.com/mattn/go-sqlite3" + "github.com/stretchr/testify/assert" ) func changeDefaultFileBlockSize(n int64) (restore func()) { @@ -152,3 +151,36 @@ func TestDbfsReadWrite(t *testing.T) { _, err = f2r.ReadString('\n') assert.ErrorIs(t, err, io.EOF) } + +func TestDbfsSeekWrite(t *testing.T) { + defer changeDefaultFileBlockSize(4)() + + assert.NoError(t, unittest.PrepareTestDatabase()) + + f, err := OpenFile(db.DefaultContext, "test2.log", os.O_RDWR|os.O_CREATE) + assert.NoError(t, err) + defer f.Close() + + n, err := f.Write([]byte("111")) + assert.NoError(t, err) + + _, err = f.Seek(int64(n), io.SeekStart) + assert.NoError(t, err) + + _, err = f.Write([]byte("222")) + assert.NoError(t, err) + + _, err = f.Seek(int64(n), io.SeekStart) + assert.NoError(t, err) + + _, err = f.Write([]byte("333")) + assert.NoError(t, err) + + fr, err := OpenFile(db.DefaultContext, "test2.log", os.O_RDONLY) + assert.NoError(t, err) + defer f.Close() + + buf, err := io.ReadAll(fr) + assert.NoError(t, err) + assert.EqualValues(t, "111333", string(buf)) +}