From 6fb1f796a56d5f3f0a19c0e64b8b08322a997be3 Mon Sep 17 00:00:00 2001 From: Restia-Ashbell <107416976+restia-ashbell@users.noreply.github.com> Date: Sun, 2 Nov 2025 20:02:16 +0800 Subject: [PATCH] fix: handle nil pointer stored in non-nil interface (#2337) --- adapter/outbound/shadowsocksr.go | 5 +++-- transport/trojan/trojan.go | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/adapter/outbound/shadowsocksr.go b/adapter/outbound/shadowsocksr.go index a9975107..efc368a4 100644 --- a/adapter/outbound/shadowsocksr.go +++ b/adapter/outbound/shadowsocksr.go @@ -252,13 +252,14 @@ func (spc *ssrPacketConn) WaitReadFrom() (data []byte, put func(), addr net.Addr return nil, nil, nil, errors.New("parse addr error") } - addr = _addr.UDPAddr() - if addr == nil { + udpAddr := _addr.UDPAddr() + if udpAddr == nil { if put != nil { put() } return nil, nil, nil, errors.New("parse addr error") } + addr = udpAddr data = data[len(_addr):] return diff --git a/transport/trojan/trojan.go b/transport/trojan/trojan.go index 93819130..73b09dbc 100644 --- a/transport/trojan/trojan.go +++ b/transport/trojan/trojan.go @@ -183,7 +183,11 @@ func (pc *PacketConn) WaitReadFrom() (data []byte, put func(), addr net.Addr, er if err != nil { return nil, nil, nil, err } - addr = destination.UDPAddr() + udpAddr := destination.UDPAddr() + if udpAddr == nil { + return nil, nil, nil, errors.New("parse addr error") + } + addr = udpAddr data = pool.Get(pool.UDPBufferSize) put = func() {