From 5129c1e4ffaff7100e85793eefd0660fcefb8663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E6=89=87=E6=BB=91=E7=BF=94=E7=BF=BC?= Date: Wed, 13 Aug 2025 14:02:26 +0000 Subject: [PATCH] XHTTP: Fix packet up writer --- common/buf/buffer.go | 7 ++++++- transport/internet/splithttp/dialer.go | 10 ++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/common/buf/buffer.go b/common/buf/buffer.go index 2aa60e6a..72f3248b 100644 --- a/common/buf/buffer.go +++ b/common/buf/buffer.go @@ -13,6 +13,8 @@ const ( Size = 8192 ) +var ErrBufferFull = errors.New("buffer is full") + var zero = [Size * 10]byte{0} var pool = bytespool.GetPool(Size) @@ -258,13 +260,16 @@ func (b *Buffer) IsFull() bool { func (b *Buffer) Write(data []byte) (int, error) { nBytes := copy(b.v[b.end:], data) b.end += int32(nBytes) + if nBytes < len(data) { + return nBytes, ErrBufferFull + } return nBytes, nil } // WriteByte writes a single byte into the buffer. func (b *Buffer) WriteByte(v byte) error { if b.IsFull() { - return errors.New("buffer full") + return ErrBufferFull } b.v[b.end] = v b.end++ diff --git a/transport/internet/splithttp/dialer.go b/transport/internet/splithttp/dialer.go index dee5f486..9133f9a0 100644 --- a/transport/internet/splithttp/dialer.go +++ b/transport/internet/splithttp/dialer.go @@ -489,15 +489,17 @@ func (w uploadWriter) Write(b []byte) (int, error) { } */ - buffer := buf.New() + buffer := buf.MultiBufferContainer{} n, err := buffer.Write(b) if err != nil { return 0, err } - err = w.WriteMultiBuffer([]*buf.Buffer{buffer}) - if err != nil { - return 0, err + for _, buff := range buffer.MultiBuffer { + err := w.WriteMultiBuffer(buf.MultiBuffer{buff}) + if err != nil { + return 0, err + } } return n, nil }