diff --git a/proxy/hysteria/client.go b/proxy/hysteria/client.go index 7c2bc58d..614a7ff9 100644 --- a/proxy/hysteria/client.go +++ b/proxy/hysteria/client.go @@ -244,8 +244,11 @@ type UDPReader struct { func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error) { if r.firstMsg != nil { - buffer := buf.NewWithSize(int32(len(r.firstMsg.Data))) - buffer.Write(r.firstMsg.Data) + buffer := buf.New() + _, err := buffer.Write(r.firstMsg.Data) + if err != nil { + return nil, err + } buffer.UDP = r.firstDest r.firstMsg = nil @@ -275,8 +278,11 @@ func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error) { continue } - buffer := buf.NewWithSize(int32(len(dfMsg.Data))) - buffer.Write(dfMsg.Data) + buffer := buf.New() + if _, err := buffer.Write(dfMsg.Data); err != nil { + return nil, err + } + buffer.UDP = &dest return buf.MultiBuffer{buffer}, nil diff --git a/proxy/tun/udp_fullcone.go b/proxy/tun/udp_fullcone.go index fdec7bf6..ab59e97f 100644 --- a/proxy/tun/udp_fullcone.go +++ b/proxy/tun/udp_fullcone.go @@ -103,8 +103,10 @@ func (c *udpConn) ReadMultiBuffer() (buf.MultiBuffer, error) { return nil, io.EOF } - b := buf.NewWithSize(int32(len(e.data))) - b.Write(e.data) + b := buf.New() + if _, err := b.Write(e.data); err != nil { + return nil, err + } b.UDP = e.dest return buf.MultiBuffer{b}, nil diff --git a/proxy/wireguard/tun.go b/proxy/wireguard/tun.go index 6decfa70..4168e175 100644 --- a/proxy/wireguard/tun.go +++ b/proxy/wireguard/tun.go @@ -350,8 +350,11 @@ func (c *udpConn) ReadMultiBuffer() (buf.MultiBuffer, error) { return nil, io.EOF } - b := buf.NewWithSize(int32(len(q.p))) - b.Write(q.p) + b := buf.New() + if _, err := b.Write(q.p); err != nil { + return nil, err + } + b.UDP = q.dest return buf.MultiBuffer{b}, nil diff --git a/transport/internet/finalmask/finalmask.go b/transport/internet/finalmask/finalmask.go index e7bf0080..2fca1215 100644 --- a/transport/internet/finalmask/finalmask.go +++ b/transport/internet/finalmask/finalmask.go @@ -5,7 +5,7 @@ import ( "net" "sync" - xbuf "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/bytespool" "github.com/xtls/xray-core/common/errors" ) @@ -150,11 +150,10 @@ type headerReadAddrAware interface { func (c *headerManagerConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) { buf := p if len(buf) < UDPSize { - b := xbuf.NewWithSize(UDPSize) - defer b.Release() - b.Resize(0, UDPSize) - - buf = b.Bytes() + b := bytespool.Alloc(UDPSize) + b = b[:UDPSize] + defer bytespool.Free(b) + buf = b } n, addr, err = c.PacketConn.ReadFrom(buf)