From 6ad95c4c59efacaa756c1f58c6c62424c8b9d929 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Thu, 17 Nov 2016 18:30:35 +0000 Subject: [PATCH 1/2] Fix use of cap in MultiReadSeeker Signed-off-by: Tom Wilkie Upstream-commit: 158bb9bbd588aa03a3567f40b367025ccbd81fb3 Component: engine --- components/engine/pkg/ioutils/multireader.go | 2 +- .../engine/pkg/ioutils/multireader_test.go | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/components/engine/pkg/ioutils/multireader.go b/components/engine/pkg/ioutils/multireader.go index 234999bc92..0806552838 100644 --- a/components/engine/pkg/ioutils/multireader.go +++ b/components/engine/pkg/ioutils/multireader.go @@ -155,7 +155,7 @@ func (r *multiReadSeeker) Read(b []byte) (int, error) { r.pos = &pos{0, 0} } - bCap := int64(cap(b)) + bCap := int64(len(b)) buf := bytes.NewBuffer(nil) var rdr io.ReadSeeker diff --git a/components/engine/pkg/ioutils/multireader_test.go b/components/engine/pkg/ioutils/multireader_test.go index 306f5b0e1f..65309a9565 100644 --- a/components/engine/pkg/ioutils/multireader_test.go +++ b/components/engine/pkg/ioutils/multireader_test.go @@ -2,6 +2,7 @@ package ioutils import ( "bytes" + "encoding/binary" "fmt" "io" "io/ioutil" @@ -188,3 +189,23 @@ func TestMultiReadSeekerCurAfterSet(t *testing.T) { t.Fatalf("reader size does not match, got %d, expected %d", size, mid+18) } } + +func TestMultiReadSeekerSmallReads(t *testing.T) { + readers := []io.ReadSeeker{} + for i := 0; i < 10; i++ { + integer := make([]byte, 4, 4) + binary.BigEndian.PutUint32(integer, uint32(i)) + readers = append(readers, bytes.NewReader(integer)) + } + + reader := MultiReadSeeker(readers...) + for i := 0; i < 10; i++ { + var integer uint32 + if err := binary.Read(reader, binary.BigEndian, &integer); err != nil { + t.Fatalf("Read from NewMultiReadSeeker failed: %v", err) + } + if uint32(i) != integer { + t.Fatalf("Read wrong value from NewMultiReadSeeker: %d != %d", i, integer) + } + } +} From 169609485f8fdd33b4034b97291b37a2a9db9795 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Thu, 17 Nov 2016 21:04:39 +0000 Subject: [PATCH 2/2] s/bCap/bLen/ Signed-off-by: Tom Wilkie Upstream-commit: 3a0554585177a55802377423bb4529d305b4566f Component: engine --- components/engine/pkg/ioutils/multireader.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/engine/pkg/ioutils/multireader.go b/components/engine/pkg/ioutils/multireader.go index 0806552838..d7b97486c6 100644 --- a/components/engine/pkg/ioutils/multireader.go +++ b/components/engine/pkg/ioutils/multireader.go @@ -155,18 +155,18 @@ func (r *multiReadSeeker) Read(b []byte) (int, error) { r.pos = &pos{0, 0} } - bCap := int64(len(b)) + bLen := int64(len(b)) buf := bytes.NewBuffer(nil) var rdr io.ReadSeeker for _, rdr = range r.readers[r.pos.idx:] { - readBytes, err := io.CopyN(buf, rdr, bCap) + readBytes, err := io.CopyN(buf, rdr, bLen) if err != nil && err != io.EOF { return -1, err } - bCap -= readBytes + bLen -= readBytes - if bCap == 0 { + if bLen == 0 { break } }