From 9f8cb8bc8bd6f64098b86a2ef77ecc565877d64f Mon Sep 17 00:00:00 2001 From: maskedeken <52683904+maskedeken@users.noreply.github.com> Date: Mon, 11 Jan 2021 17:13:59 +0800 Subject: [PATCH] Fix: trojan: do not panic when UDP dispatcher fails to write response (#599) --- proxy/trojan/server.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/proxy/trojan/server.go b/proxy/trojan/server.go index 6e51829f9..2e3fff740 100644 --- a/proxy/trojan/server.go +++ b/proxy/trojan/server.go @@ -207,7 +207,9 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn internet func (s *Server) handleUDPPayload(ctx context.Context, clientReader *PacketReader, clientWriter *PacketWriter, dispatcher routing.Dispatcher) error { udpServer := udp.NewDispatcher(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) { - common.Must(clientWriter.WriteMultiBufferWithMetadata(buf.MultiBuffer{packet.Payload}, packet.Source)) + if err := clientWriter.WriteMultiBufferWithMetadata(buf.MultiBuffer{packet.Payload}, packet.Source); err != nil { + newError("failed to write response").Base(err).AtWarning().WriteToLog(session.ExportIDToError(ctx)) + } }) inbound := session.InboundFromContext(ctx)