From 923d49464dc5f79962df60ef579bad4e60e1d363 Mon Sep 17 00:00:00 2001 From: dyhkwong <50692134+dyhkwong@users.noreply.github.com> Date: Sat, 1 Apr 2023 10:00:59 +0800 Subject: [PATCH] proxy/trojan: fix writing UDP packet close v2fly#2440, close v2fly#1795 --- proxy/trojan/protocol.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/proxy/trojan/protocol.go b/proxy/trojan/protocol.go index 962f5db73..aa8d9b531 100644 --- a/proxy/trojan/protocol.go +++ b/proxy/trojan/protocol.go @@ -110,11 +110,11 @@ type PacketWriter struct { // WriteMultiBuffer implements buf.Writer func (w *PacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { - b := make([]byte, maxLength) - for !mb.IsEmpty() { - var length int - mb, length = buf.SplitBytes(mb, b) - if _, err := w.writePacket(b[:length], w.Target); err != nil { + for _, b := range mb { + if b.IsEmpty() { + continue + } + if _, err := w.writePacket(b.Bytes(), w.Target); err != nil { buf.ReleaseMulti(mb) return err } @@ -125,11 +125,11 @@ func (w *PacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error { // WriteMultiBufferWithMetadata writes udp packet with destination specified func (w *PacketWriter) WriteMultiBufferWithMetadata(mb buf.MultiBuffer, dest net.Destination) error { - b := make([]byte, maxLength) - for !mb.IsEmpty() { - var length int - mb, length = buf.SplitBytes(mb, b) - if _, err := w.writePacket(b[:length], dest); err != nil { + for _, b := range mb { + if b.IsEmpty() { + continue + } + if _, err := w.writePacket(b.Bytes(), dest); err != nil { buf.ReleaseMulti(mb) return err }