From eeed65f8265dcf0605471ab2225c2ac2b3253613 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Wed, 28 Mar 2018 14:33:34 +0200 Subject: [PATCH] fix #999 --- common/buf/multi_buffer.go | 2 +- common/buf/multi_buffer_test.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/common/buf/multi_buffer.go b/common/buf/multi_buffer.go index 85830fc7b..a442ce115 100644 --- a/common/buf/multi_buffer.go +++ b/common/buf/multi_buffer.go @@ -167,7 +167,7 @@ func (mb *MultiBuffer) SliceBySize(size int) MultiBuffer { } *mb = (*mb)[endIndex:] if endIndex == 0 && len(*mb) > 0 { - b := New() + b := NewSize(uint32(size)) common.Must(b.Reset(ReadFullFrom((*mb)[0], size))) return NewMultiBufferValue(b) } diff --git a/common/buf/multi_buffer_test.go b/common/buf/multi_buffer_test.go index 92df32f02..e78918f44 100644 --- a/common/buf/multi_buffer_test.go +++ b/common/buf/multi_buffer_test.go @@ -1,8 +1,10 @@ package buf_test import ( + "crypto/rand" "testing" + "v2ray.com/core/common" . "v2ray.com/core/common/buf" . "v2ray.com/ext/assert" ) @@ -33,3 +35,16 @@ func TestMultiBufferAppend(t *testing.T) { mb.Append(b) assert(mb.Len(), Equals, 2) } + +func TestMultiBufferSliceBySizeLarge(t *testing.T) { + assert := With(t) + + lb := NewSize(8 * 1024) + common.Must(lb.Reset(ReadFrom(rand.Reader))) + + var mb MultiBuffer + mb.Append(lb) + + mb2 := mb.SliceBySize(4 * 1024) + assert(mb2.Len(), Equals, 4*1024) +}