Skip to content

Commit 5cb7e8c

Browse files
authored
Merge pull request #8 from trufflesecurity/revert_and_update_module
Revert and update module
2 parents b3201a4 + 4f1e1c0 commit 5cb7e8c

File tree

3 files changed

+32
-34
lines changed

3 files changed

+32
-34
lines changed

disk_buffer_reader.go

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -98,46 +98,44 @@ func (dbr *DiskBufferReader) Reset() error {
9898

9999
// Seek sets the offset for the next Read or Write to offset.
100100
func (dbr *DiskBufferReader) Seek(offset int64, whence int) (int64, error) {
101-
newIndex := dbr.index
102-
103101
switch whence {
104102
case io.SeekStart:
105-
newIndex = offset
103+
switch {
104+
case offset < 0:
105+
return 0, fmt.Errorf("can not seek to before start of reader")
106+
case offset > dbr.bytesRead:
107+
trashBytes := make([]byte, offset-dbr.bytesRead)
108+
dbr.Read(trashBytes)
109+
}
110+
dbr.index = offset
106111
case io.SeekCurrent:
107-
newIndex += offset
108-
case io.SeekEnd:
109-
newIndex = dbr.bytesRead + offset
110-
}
111-
112-
if newIndex < 0 {
113-
return 0, fmt.Errorf("can not seek to before start of reader")
114-
}
115-
116-
// If seeking past the bytes read and recording is on, fill the gap by reading the necessary bytes.
117-
if newIndex > dbr.bytesRead && dbr.recording {
118-
_, err := dbr.tmpFile.Seek(0, io.SeekEnd)
119-
if err != nil {
120-
return 0, err
112+
switch {
113+
case dbr.index+offset < 0:
114+
return 0, fmt.Errorf("can not seek to before start of reader")
115+
case offset > 0:
116+
trashBytes := make([]byte, offset)
117+
dbr.Read(trashBytes)
121118
}
122-
123-
bytesToRead := int(newIndex - dbr.bytesRead)
124-
trashBytes := make([]byte, bytesToRead)
125-
126-
n, err := dbr.reader.Read(trashBytes)
127-
if err != nil && !errors.Is(err, io.EOF) {
128-
return 0, err
119+
dbr.index += offset
120+
case io.SeekEnd:
121+
trashBytes := make([]byte, 1024)
122+
for {
123+
_, err := dbr.Read(trashBytes)
124+
if err != nil {
125+
if errors.Is(err, io.EOF) {
126+
break
127+
}
128+
return dbr.index, err
129+
}
129130
}
130-
131-
m, err := dbr.tmpFile.Write(trashBytes[:n])
132-
if err != nil {
133-
return 0, err
131+
if dbr.index+offset < 0 {
132+
return 0, fmt.Errorf("can not seek to before start of reader")
134133
}
135-
136-
dbr.bytesRead += int64(m)
134+
dbr.index += offset
135+
return dbr.index, nil
137136
}
138137

139-
dbr.index = newIndex
140-
return newIndex, nil
138+
return dbr.index, nil
141139
}
142140

143141
// ReadAt reads len(p) bytes into p starting at offset off in the underlying input source.

disk_buffer_reader_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ func TestTmpDir(t *testing.T) {
189189
tmpDir := "/tmp/dbrtest"
190190

191191
err := os.Mkdir(tmpDir, 0755)
192-
if !os.IsExist(err) {
192+
if err != nil && !os.IsExist(err) {
193193
t.Fatal(err)
194194
}
195195
defer os.RemoveAll(tmpDir)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
module github.com/bill-rich/disk-buffer-reader
1+
module github.com/trufflesecurity/disk-buffer-reader
22

33
go 1.19

0 commit comments

Comments
 (0)