Browse code

Fix use of cap in MultiReadSeeker

Signed-off-by: Tom Wilkie <tom.wilkie@gmail.com>

Tom Wilkie authored on 2016/11/18 03:30:35
Showing 2 changed files
... ...
@@ -155,7 +155,7 @@ func (r *multiReadSeeker) Read(b []byte) (int, error) {
155 155
 		r.pos = &pos{0, 0}
156 156
 	}
157 157
 
158
-	bCap := int64(cap(b))
158
+	bCap := int64(len(b))
159 159
 	buf := bytes.NewBuffer(nil)
160 160
 	var rdr io.ReadSeeker
161 161
 
... ...
@@ -2,6 +2,7 @@ package ioutils
2 2
 
3 3
 import (
4 4
 	"bytes"
5
+	"encoding/binary"
5 6
 	"fmt"
6 7
 	"io"
7 8
 	"io/ioutil"
... ...
@@ -188,3 +189,23 @@ func TestMultiReadSeekerCurAfterSet(t *testing.T) {
188 188
 		t.Fatalf("reader size does not match, got %d, expected %d", size, mid+18)
189 189
 	}
190 190
 }
191
+
192
+func TestMultiReadSeekerSmallReads(t *testing.T) {
193
+	readers := []io.ReadSeeker{}
194
+	for i := 0; i < 10; i++ {
195
+		integer := make([]byte, 4, 4)
196
+		binary.BigEndian.PutUint32(integer, uint32(i))
197
+		readers = append(readers, bytes.NewReader(integer))
198
+	}
199
+
200
+	reader := MultiReadSeeker(readers...)
201
+	for i := 0; i < 10; i++ {
202
+		var integer uint32
203
+		if err := binary.Read(reader, binary.BigEndian, &integer); err != nil {
204
+			t.Fatalf("Read from NewMultiReadSeeker failed: %v", err)
205
+		}
206
+		if uint32(i) != integer {
207
+			t.Fatalf("Read wrong value from NewMultiReadSeeker: %d != %d", i, integer)
208
+		}
209
+	}
210
+}