Browse Source

Fix short buffers in some specific cases

Andrey 6 years ago
parent
commit
908ada6c27
4 changed files with 4 additions and 0 deletions
  1. 3 0
      reader.go
  2. 1 0
      reader_test.go
  3. BIN
      testdata/pg_control.tar
  4. BIN
      testdata/pg_control.tar.lz4

+ 3 - 0
reader.go

@@ -158,6 +158,9 @@ func (z *Reader) Read(buf []byte) (int, error) {
 		if debugFlag {
 			debug("reading block from writer")
 		}
+		// Reset uncompressed buffer
+		z.data = z.zdata[:cap(z.zdata)][len(z.zdata):]
+
 		// Block length: 0 = end of frame, highest bit set: uncompressed.
 		bLen, err := z.readUint32()
 		if err != nil {

+ 1 - 0
reader_test.go

@@ -22,6 +22,7 @@ func TestReader(t *testing.T) {
 		"testdata/pi.txt.lz4",
 		"testdata/random.data.lz4",
 		"testdata/repeat.txt.lz4",
+		"testdata/pg_control.tar.lz4",
 	}
 
 	for _, fname := range goldenFiles {

BIN
testdata/pg_control.tar


BIN
testdata/pg_control.tar.lz4