Darien Raymond 7 年之前
父节点
当前提交
eeed65f826
共有 2 个文件被更改,包括 16 次插入1 次删除
  1. 1 1
      common/buf/multi_buffer.go
  2. 15 0
      common/buf/multi_buffer_test.go

+ 1 - 1
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)
 	}

+ 15 - 0
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)
+}