Skip to content

Commit 2b9933d

Browse files
authored
Merge pull request #227 from jwebb/fix-fail
Fix WriteTo on a started Reader, and the resulting incorrect error message
2 parents 1a4bbae + 3bb6903 commit 2b9933d

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

reader.go

+1
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ func (r *Reader) Reset(reader io.Reader) {
214214
// WriteTo efficiently uncompresses the data from the Reader underlying source to w.
215215
func (r *Reader) WriteTo(w io.Writer) (n int64, err error) {
216216
switch r.state.state {
217+
case readState:
217218
case closedState, errorState:
218219
return 0, r.state.err
219220
case newState:

reader_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -319,3 +319,31 @@ func TestValidFrameHeader(t *testing.T) {
319319
})
320320
}
321321
}
322+
323+
func TestReader_WriteTo(t *testing.T) {
324+
data := pg1661LZ4
325+
buf := new(bytes.Buffer)
326+
src := bytes.NewReader(data)
327+
zr := lz4.NewReader(src)
328+
329+
// Read header only
330+
n, err := zr.Read(nil)
331+
if err != nil {
332+
t.Fatalf("error reading header: %v", err)
333+
}
334+
if n != 0 {
335+
t.Fatalf("expecting zero byte read, got %d bytes", n)
336+
}
337+
338+
n64, err := zr.WriteTo(buf)
339+
if err != nil {
340+
t.Fatalf("error during WriteTo: %v", err)
341+
}
342+
if n64 != int64(len(pg1661)) {
343+
t.Fatalf("expecting to read %d bytes, got %d", len(pg1661), n64)
344+
}
345+
346+
if !reflect.DeepEqual(buf.Bytes(), pg1661) {
347+
t.Fatal("result does not match original")
348+
}
349+
}

state.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func (s *_State) check(errp *error) {
6969
}
7070

7171
func (s *_State) fail() error {
72-
s.state = errorState
7372
s.err = fmt.Errorf("%w[%s]", lz4errors.ErrInternalUnhandledState, s.state)
73+
s.state = errorState
7474
return s.err
7575
}

0 commit comments

Comments
 (0)