diff --git a/proxy/shadowsocks/server.go b/proxy/shadowsocks/server.go index 8aacd2eb3..ffb676920 100644 --- a/proxy/shadowsocks/server.go +++ b/proxy/shadowsocks/server.go @@ -117,9 +117,8 @@ func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection ctx = protocol.ContextWithUser(ctx, request.User) udpServer.Dispatch(ctx, dest, data, func(payload *buf.Buffer) { - defer payload.Release() - data, err := EncodeUDPPacket(request, payload.Bytes()) + payload.Release() if err != nil { newError("failed to encode UDP packet").Base(err).AtWarning().WithContext(ctx).WriteToLog() return diff --git a/proxy/socks/server.go b/proxy/socks/server.go index 77803ad2a..314fd30ef 100644 --- a/proxy/socks/server.go +++ b/proxy/socks/server.go @@ -209,11 +209,11 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn internet.Connection, } udpServer.Dispatch(ctx, request.Destination(), payload, func(payload *buf.Buffer) { - defer payload.Release() - newError("writing back UDP response with ", payload.Len(), " bytes").AtDebug().WithContext(ctx).WriteToLog() udpMessage, err := EncodeUDPPacket(request, payload.Bytes()) + payload.Release() + defer udpMessage.Release() if err != nil { newError("failed to write UDP response").AtWarning().Base(err).WithContext(ctx).WriteToLog() diff --git a/transport/internet/kcp/listener.go b/transport/internet/kcp/listener.go index 12786cc02..00ea56f29 100644 --- a/transport/internet/kcp/listener.go +++ b/transport/internet/kcp/listener.go @@ -73,9 +73,9 @@ func NewListener(ctx context.Context, address net.Address, port net.Port, addCon } func (l *Listener) OnReceive(payload *buf.Buffer, src net.Destination, originalDest net.Destination) { - defer payload.Release() - segments := l.reader.Read(payload.Bytes()) + payload.Release() + if len(segments) == 0 { newError("discarding invalid payload from ", src).WriteToLog() return